我有一些repo A
和repo B
。 repo A
中的项目取决于repo B
的项目。
我希望这样做,当某些用户尝试从我的repo A
中提取来源时,从repo A
提取,repo B
中的来源也必须在某个文件夹中提取。我看到,SVN可以将一些SVN repo链接到其他SVN repo。
我如何链接git repos?
感谢。
答案 0 :(得分:3)
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。我认为选择正确的工作流程以避免大多数问题非常重要。