在另一个git repo中维护git repo


124

这是我想要的:

REPO-A
  /.git
  /otherFiles
  /REPO-B
    /.git
    /moreFiles

我希望能够将REPO-A的所有内容推送到REMOTE-A,并且仅将 REPO-B 推送到REMOTE-B。

可能?

Answers:


104

听起来您想使用Git 子模块

Git使用子模块解决了这个问题。子模块允许您将Git存储库保留为另一个Git存储库的子目录。这使您可以将另一个存储库克隆到项目中,并使提交分开进行。


19
不完全是:它不会推送repoA的所有内容:只有A加上对B的引用。但是我不批评您的回答,当我重新阅读OP的问题时,我急于写几乎相同的内容;)
VonC

1
这几乎是子模块的用例。REPO-A和回购B被视为git的回购自己的权利,用自己的提交,起源,历史,等等
达米安·威尔逊

2
因此,如果我没看错,我是否可以完全在我找到的子模块之外单独签出submodule-d仓库?我将如何获取一个已经存在的仓库,并将其作为另一个项目的子模块引用?
JohnO 2011年

我不是在寻找与OP完全相同的解决方案,并且我平均认为这可能是对类似问题的更搜寻的答案:“是否将git REPO-B放在git REPO-A中嵌入参考或完整副本git REPO-B?”。
jaya

64

我一直使用符号链接来维护两个单独且不同的存储库。


8
对于git子模块和git子树看起来如何令人困惑,这是一个有效的答案。
Trevor Hickey

这对于从多个远程存储库组装一个应用程序也非常有用
GeraldScott

22
要维护两个单独且不同的存储库,将存储库B保留在存储库A中,而仅将存储库B添加到存储库A中,是否可以.gitignore
法比恩·斯瑙瓦特

1
我正在考虑按照Fabien的建议进行操作,这样做是否有问题?
theonlygusti

1
我将git信息库分开保存,并将REPO-B所做的更改复制到嵌套在REPO-A中的REPO-B副本(无.git)中。我用rsync做到这一点。我rsync -avh --delete --exclude='.git' REPO-B/ REPO-A/REPO-B-copy/对REPO-B进行了任何更改后都在运行
Shai

29

是的,您可以使用所绘制的文件层次结构完全按照您的要求进行操作。Repo-B将是独立的,并且不了解Repo-A。Repo-A将跟踪其自身文件和Repo-B的文件中的所有更改。

但是,我不建议您这样做。每次更改文件并提交到Repo-B时,您都必须提交Repo-A。在Repo-B中的分支将与Repo-A混为一谈,而在Repo-A中的分支将很奇怪(无法删除文件夹等)。子模块绝对是必经之路。


53
您不能简单地将REPO-B添加到/REPO-A/.gitignore吗?
mikkelbreum 2014年

2
@mikkelbreum我有完全相同的想法。我们目前正在将subverion用于主要项目,并在其中一个子文件夹中使用git repo。使用SVN时,我只是将带有git repo的文件夹添加到svn:ignore属性,并且我问自己是否可以使用git做同样的事情。
2ndkauboy 2014年

3
好吧,我看不到为什么将嵌套的git repo添加到父repo的ignore列表中不起作用。。但是与此同时,我感觉到一定有一些我没想到的陷阱,因为这种方法是很少见的建议,许多人不鼓励嵌套git repos。
mikkelbreum 2014年

18
我只是实现了这种确切的情况。我在子文件夹中有一些未压缩的CSS文件,不想将其推送到远程仓库中,因此它位于我的.gitignore中。但是我确实想在本地跟踪对这些文件的更改。我在包含未压缩文件的文件夹内设置了一个存储库,并将所有文件添加到该存储库中。父仓库仍会忽略它,但我可以跟踪子仓库内的更改。是否建议使用此解决方案对于某些情况是至关重要的。
BrianVPS 2015年

1
我知道,每当您在一个存储库中切换分支时,另一个将看到一大堆更改,但是为什么“在Repo-A中进行分支会很麻烦(无法删除文件夹等)”?谢谢!
user2688151'9

2

您可以使用“ git-subrepo”来实现所需的功能(该REPO-A repo包含所有文件,包括REPO-B文件夹中的文件,而不仅仅是引用):

https://github.com/ingydotnet/git-subrepo

如果您的某些贡献者未安装subrepo命令,它仍然可以工作。他们将看到完整的文件夹结构,但无法将更改提交到子仓库。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.