有一種方法可以在不使用子模塊或子樹的情況下引入遠程存儲庫,即使該存儲庫與您的存儲庫完全無關並且存在衝突目錄。
首先,將該存儲庫添加爲.git/config
中的其中一個遠程存儲庫。例如,假設你想從Github引入Zaldor的Gruff庫。這些名字完全是虛構的:
[remote "gruff-upstream"]
fetch = +refs/heads/*:refs/remotes/gruff/*
url = https://github.com/zaldor/gruff.git
現在你可以做一個git fetch gruff-upstream
讓所有的對象。現在您可以在gruff
項目中看到可用分支。
$ git branch -r
gruff/experimental-hack
gruff/master
origin/master
這兩個gruff
行是gruff
的分支機構。 origin/master
是我們自己的起源。名稱衝突:gruff
有master
,我們也有master
。這並不重要:我們可以給gruff/master
一個不同的本地分支名稱。現在
$ git branch -t gruff-master gruff/master
Branch gruff-master set up to track remote branch master from gruff-upstream.
,如果我們git checkout gruff-master
,我們所有的混帳跟蹤文件都將消失,取而代之的是gruff
工作副本:
$ git checkout gruff-master
現在,我們可以梳理了這個gruff-master
分支一點點。例如,我們可以所有的文件移動到子目錄,刪除不需要的文件和這樣的:
$ mkdir gruff
$ git mv ...files... gruff
$ git commit -a -m "moving gruff stuff to gruff/ subdir"
接下來,我們切換回我們自己的master
。粗暴的文件消失,我們的文件都回:
$ git checkout master
現在我們可以把從gruff
一些文件到我們master
:
$ git checkout gruff-master -- gruff/file1 gruff/file2 ...
這些文件兌現我們的工作拷貝,並加入到我們的索引:
$ git checkout
A gruff/file1
A gruff/file2
...
我們現在可以將這些信息提交到我們的master
。
當上遊gruff
發佈新版本的文件時,我們可以切換到我們的gruff-branch
並拉動。根據我們的清理和提交來解決新的更改。返回我們的master
,我們可以從我們的gruff-master
本地跟蹤分支中選擇最新的更新。
是的,這基本上使用Git作爲一個美化補丁工具。來自gruff-master
的素材摘入master
沒有任何血統;它看起來像添加文件。然而,它總比沒有,並且在很多方面不如子樹或模塊麻煩。
來源
2015-09-04 05:13:24
Kaz
請參閱'man git-submodule' – Jokester
鑑於更新部分,可能是其他地方的真正子模塊,以及當前回購中的幾個符號鏈接? – Jokester
你能給我一點演練嗎?我正在玩git submodules支持。在「網站」文件夾已存在的情況下點擊一個磚牆。在我分支/刪除文件夾來添加子模塊之前,我只想確保我做的是正確的事情。 – Doug