1
我有一些repo A
和repo B
。項目repo A
取決於項目repo B
。 我想這樣做,當一些用戶試圖從我的repo A
拉動來源,從repo A
拉,來源repo B
也必須拉到一些文件夾。我已經看到,SVN可以將某些SVN回購鏈接與其他SVN回購鏈接聯繫起來。 如何鏈接git回購?Git - 將其他存儲庫鏈接到我的存儲庫
謝謝。
我有一些repo A
和repo B
。項目repo A
取決於項目repo B
。 我想這樣做,當一些用戶試圖從我的repo A
拉動來源,從repo A
拉,來源repo B
也必須拉到一些文件夾。我已經看到,SVN可以將某些SVN回購鏈接與其他SVN回購鏈接聯繫起來。 如何鏈接git回購?Git - 將其他存儲庫鏈接到我的存儲庫
謝謝。
Git對此有submodules。
例子:
$ git init repo_a
Initialized empty Git repository in /Users/messa/temp/submodule-example/repo_a/.git/
$ git init repo_b
Initialized empty Git repository in /Users/messa/temp/submodule-example/repo_b/.git/
$ cd repo_b
$ echo 'This is Project B.' >> README.txt
$ git add README.txt
$ git commit -am 'Initial commit in B'
[master (root-commit) 5158772] Initial commit in B
1 file changed, 1 insertion(+)
create mode 100644 README.txt
$ cd ../repo_a
$ echo 'This is Project A, that depends on Project B.' >> README.txt
$ git add README.txt
$ git commit -am 'Initial commit in A'
[master (root-commit) 7e8275b] Initial commit in A
1 file changed, 1 insertion(+)
create mode 100644 README.txt
$ git submodule add ../repo_b project_b
Cloning into 'project_b'...
done.
$ git status
# On branch master
# Changes to be committed:
# (use "git reset HEAD <file>..." to unstage)
#
# new file: .gitmodules
# new file: project_b
#
$ git commit -am 'Added submodule project_b'
[master c8fc469] Added submodule project_b
2 files changed, 4 insertions(+)
create mode 100644 .gitmodules
create mode 160000 project_b
$ tree
.
├── README.txt
└── project_b
└── README.txt
1 directory, 2 files
您可以準確地控制從repo_b什麼承諾將從repo_a鏈接。
欲瞭解更多信息,請參閱git help submodule
或上面的鏈接。
但是有一個問題 - 當有人克隆repo_a時,project_b會在那裏,但是是空的。在git clone
之後,將需要git submodule init
和git submodule update
。
我沒有子模塊的實際經驗,但我見過一些批評 - 例如this article。我認爲選擇正確的工作流程以避免大部分問題非常重要。