簡體   English   中英

Git 子樹推送似乎推送不適用於子樹的提交?

[英]Git subtree push seems to push commits that don't apply to the subtree?

我有一個 repo 的子文件夾,我試圖將其拆分為子樹。 首先,我按照這個過程( https://stackoverflow.com/a/43985326/136785 )創建了一個分支,其中只包含與子文件夾相關的提交(包括重命名)。 我確認分支的提交日志看起來符合預期。

接下來,我為該子項目創建一個新的存儲庫:

git init --bare \\nas\git\FPF.git
git push ssh://myserver.com/~/FPF.git branch-fpf:master 

然后我從父倉庫中刪除子文件夾並將其重新添加為子樹:

git rm -r htdocs/wp-content/plugins/fpf
git add -A
git commit -am "Removing folder to re-add as subtree"
git remote add fpf ssh://myserver.com/~/FPF.git
git subtree add --prefix=htdocs/wp-content/plugins/fpf fpf master --squash

現在作為一個快速的健全性檢查,我將獲取遠程子樹 repo 的副本(當然在另一個文件夾中):

git clone ssh://myserver.com/~/FPF.git

和:

git subtree push --prefix=htdocs/wp-content/plugins/fpf fpf master

因為我在添加子樹和推送之間沒有提交任何更改,所以我希望沒有什么新東西可以推送。 但事實證明,如果我再次克隆 FPF.git,我發現它現在有大量額外的提交 - FPF 已經增長了很多倍,提交日志現在反映了許多只適用於外部文件的提交子樹。

為什么git 子樹推送會推送不適用於子樹的提交?

編輯 1:額外的提交是來自主(父)倉庫的所有提交,在第一次 FPF 提交之前開始並回到時間的開始。 換句話說:如果我在執行 git 子樹推送之前和之后比較 FPF 子樹存儲庫的日志,它們是相同的,直到我到達“預推送”克隆日志的底部。 從那里,“post-push”克隆的日志一直持續到父項目的第一次提交。 Git 子樹推送有效地附加了父級的完整先前歷史記錄。

編輯 2:我決定放棄 git-subtree。 我發現了https://github.com/ingydotnet/git-subrepo ,它不僅工作正常,而且解決了一些子樹的缺點(最明顯的是非常慢的推送)。 把這個問題留在這里,以防其他人想出答案或正在努力解決這個問題,但為了簡化一點,這里有一組完整的從頭到尾的命令來展示這個問題。 與上面的區別:這不是從將多個過濾器分支嫁接在一起形成的分支開始的; 它只是進行單個子樹拆分的最簡單情況:

cd MainProjectRepo
git subtree split --prefix=htdocs/wp-content/plugins/fpf --branch=branch-new
git init --bare \\nas\git\FPF.git
git remote add fpf ssh://myserver.com/~/FPF.git
git push fpf branch-new:master
git rm -r htdocs/wp-content/plugins/fpf
git add -A
git commit -am "Removing folder to re-add as subtree"
git subtree add --prefix=htdocs/wp-content/plugins/fpf fpf master --squash

git clone ssh://myserver.com/~/FPF.git /tmp/fpf1
git subtree push --prefix=htdocs/wp-content/plugins/fpf fpf master
git clone ssh://myserver.com/~/FPF.git /tmp/fpf2

如上所述,fpf2 以來自源 repo 的整個提交歷史記錄結束。

對於可能遇到此問題的其他人:

我的結論是,經過許多小時的掙扎(閱讀、討論、以不同方式重試等),git-subtree 無法正常工作。 相反,我發現了一個更好的選擇: git-subrepo 它不僅工作正常,而且解決了許多子樹的其他缺點——最明顯的是非常慢的推送。

因此,我對如何解決這個問題的“答案”:放棄 git-subtree 並改用 git-subrepo :)

git subtree確實有問題。 但是,您可以使用此補丁使其正常工作,並且速度也會更快。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM