2016-02-26 66 views
3

我想從我的git倉庫中刪除兩個不存在的文件。我應該在鏡像回購還是原版上運行BFG?

我把他們,承諾,並試圖推動,但他們太大了。所以我把他們拿出來,繼續工作,然後承諾,試圖推動,但它仍然給我同樣的錯誤。我想他們仍然在某個地方的歷史。

我想我讓問題變得更糟,因爲我一直在該分支工作,並提交了更多的提交。然後,我將該分支合併回主分支。

所以我搜索了一個解決方案,發現bfg

但頁面上的說明對我沒有意義。

首先,

$ git clone --mirror git://example.com/some-big-repo.git 

我應該在哪裏從克隆? github.com上的我的遠程倉庫沒有提交和合並,因爲我添加了大文件。但是這些指示讓我覺得我應該從那裏得到它。 (我從我的本地回購克隆。)

接下來,

$ java -jar bfg.jar --strip-blobs-bigger-than 100M some-big-repo.git 

some-big-repo.git鏡像回購或當地正常的回購? (我用鏡像回購了這一點)。

然後我檢查了我的歷史已經更新,並試圖,

$ cd some-big-repo.git 
$ git reflog expire --expire=now --all && git gc --prune=now --aggressive 

(我是這樣做的鏡像克隆)我得到了一個錯誤。

remote: error: refusing to update checked out branch: refs/heads/master 
remote: error: By default, updating the current branch in a non-bare repository 
remote: error: is denied, because it will make the index and work tree inconsistent 
remote: error: with what you pushed, and will require 'git reset --hard' to match 
remote: error: the work tree to HEAD. 
remote: error: 
remote: error: You can set 'receive.denyCurrentBranch' configuration variable to 
remote: error: 'ignore' or 'warn' in the remote repository to allow pushing into 
remote: error: its current branch; however, this is not recommended unless you 
remote: error: arranged to update its work tree to match what you pushed in some 
remote: error: other way. 
remote: error: 
remote: error: To squelch this message and still keep the default behaviour, set 
remote: error: 'receive.denyCurrentBranch' configuration variable to 'refuse'. 
To /home/cole/main_repo 
+ 94b9a0d...c7c4317 work -> work (forced update) 
! [remote rejected] master -> master (branch is currently checked out) 
error: failed to push some refs to '/home/cole/main_repo' 

這對我有意義。是的,我目前有master檢出。但是,那麼我還應該做些什麼呢?如果我以另一種方式嘗試,我只能看到問題的發生。

+0

我居然以令人驚訝的簡單方式工作。我只需要'git push https://github.com/ '。然後它沒有試圖推到當地的回購協議並給我那些錯誤。但是當我從回購中購買新的克隆時,它錯過了一些東西。我剛剛從我的本地回購中添加了他們,並承諾並推出。現在我都清新干淨。我希望這就是它應該如何工作。 –

回答

1

您應克隆/鏡像您最終計劃替換提交的回購,但有一個潛在的假設,即此回購也是裸回購。這通常是一個遠程回購,但您也可以克隆本地回購以節省帶寬。

潛在的假設是,您將最終存儲清理存儲庫的回購站是也是裸回購。基於服務器的回購,例如GitHub通常就是這樣。

在你的情況下,它聽起來像你已經克隆了一個本地,非裸(包含HEAD和工作副本)回購,以節省帶寬,或者因爲它是包含你希望清理的提交的回購。無論哪種方式,爲了推回到非裸回購,你需要確保你沒有任何你想推出的回扣,包括主。

從您的評論看來,您似乎找到了解決方案,即推回到最終的原始回購,這可能是一個裸回購。

相關問題