2010-07-08 113 views
10

我正在使用Git的子樹命令將一對庫拉入項目中。克隆使用子樹的Git倉庫的步驟

如果我然後以正常的方式克隆項目,我最終得到所需的所有代碼,但是我失去了子樹關係 - 在克隆中,每個庫都沒有遠程程序,並且沒有推出其中任何一個分支。

重建此連接的最佳方法是什麼?

是否足以完成

git remote add <lib> <remote-url> 
git fetch <lib> 

如果我把庫的第一次我請遵照:

git subtree add -P <local/lib> --squash "<lib>/master" 

這不工作時,本地目錄已雖然存在,但是當你克隆一個已經添加了庫的項目時,它當然會存在。

在這種情況下應該做什麼,以確保後續的git子樹合併和git子樹拆分命令到預期的事情?

+0

'git subtree'不是一個標準的git命令... – 2011-06-23 19:56:47

+0

「一個git-submodule命令的實驗性替代方法」 - https://github.com/apenwarr/git-subtree/ – 2012-07-16 02:21:36

回答

3

我過去的方式通過做一個子樹合併重新創建了這種關係。

git pull -s subtree <lib> master 

即使沒有什麼可以合併在/拉它應該簡單地返回而不做任何事情。隨意將--squash添加到上面的拉,這樣你就不會拉入任何遠程歷史記錄。

8

我有非常類似的問題

這裏是我創建的子樹在第一

git remote add -f sub_project url_to_remote_repository/project.git 
git merge -s ours --no-commit sub_project/master 
git read-tree --prefix=sub/project/ -u sub_project/master 
git commit -m "Added subtree merged in sub/project" 

,並得到從「項目」回購的變化,我在做

git pull -s subtree sub_project master 

現在,我推送我的本地存儲庫到github ,並從另一臺機器克隆我的github存儲庫 在那一點上,我得到了所有期望的fi在子/項目中......所以這很好。 但沒有更多的遠程,並與子/項目的關係。 所以我做了以下

git remote add -f sub_project url_to_remote_repository/project.git 
git merge -s ours --no-commit --squash sub_project/master 
git pull -s subtree sub_project master 

而且工作正常。現在,我能夠從克隆庫管理子樹前

git pull -s subtree sub_project master 

注:

1)在我們的項目中,我們使用Git子模塊這是非常不利於我們的用戶面前。這就是爲什麼我們切換到git的子樹系統。
2)在Windows機器上執行這些操作(使用git版本1.7.9.msysgit.0)時出現了一些奇怪的錯誤,並且在linux上成功執行了相同的操作。 所以,現在,操縱子樹,我經常使用Linux(如果我有任何錯誤,我在Linux上嘗試相同)。

希望這可以幫助。

+1

我不瞭解子目錄前綴映射如何在新克隆後描述的命令序列中重新建立。在命令的某處不應該有一個「子/項目」嗎? – 2015-01-06 00:23:13

+0

當我嘗試上述合併命令時,它試圖將所有內容合併到我的項目的頂層。這個命令似乎工作,雖然:「git merge --squash -s遞歸-Xsubtree =子/項目 - 沒有提交tracking_branch」 – 2015-01-06 02:01:19

+0

其實這工作甚至更好:「git merge --squash -s我們-Xsubtree =子/項目 - 沒有提交tracking_branch「 – 2015-01-06 02:12:32

0

我在將項目從使用子模塊遷移到子樹的過程中碰到了這個問題,並且最終都沒有使用(至少不是直接的,反正) - 我現在使用的是git-subrepo工具。

它通過在每個子樹的根部添加一個.gitrepo文件來解決此問題。 .gitrepo文件包含跟蹤信息,包括遠程URL,然後包含在隨後的克隆中。這真的簡化了一些事情,唯一複雜的是git-subrepo必須分別安裝在每個開發機器上(儘管存儲庫在沒有它的情況下仍然可用)。