Git - 将其他存储库链接到我的存储库

时间:2012-10-26 12:58:58

标签: git svn github

我有一些repo Arepo Brepo A中的项目取决于repo B的项目。 我希望这样做,当某些用户尝试从我的repo A中提取来源时,从repo A提取,repo B中的来源也必须在某个文件夹中提取。我看到,SVN可以将一些SVN repo链接到其他SVN repo。 我如何链接git repos?

感谢。

1 个答案:

答案 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 initgit submodule update

我对子模块没有真实的经验,但我看到了一些批评 - 例如this article。我认为选择正确的工作流程以避免大多数问题非常重要。