在另一个git仓库中维护git repo

ada*_*onk 106 git version-control github

这是我想要的:

REPO-A
  /.git
  /otherFiles
  /REPO-B
    /.git
    /moreFiles
Run Code Online (Sandbox Code Playgroud)

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

可能?

mip*_*adi 90

听起来你想要使用Git 子模块.

Git使用子模块解决了这个问题.子模块允许您将Git存储库保存为另一个Git存储库的子目录.这使您可以将另一个存储库克隆到项目中,并使您的提交保持独立.

  • 不完全是:它不会推动***所有***内容的repoA:只有A加上对B的引用.但我不批评你的答案,当我重新阅读时我的写作几乎一样OP的问题;) (17认同)
  • 因此,如果我没看错,我是否可以完全在自己找到的子模块之外单独签出submodule-d仓库?我将如何获取一个已经存在的仓库,并将其作为另一个项目的子模块引用? (2认同)

Joh*_*hnO 58

我一直使用符号链接来维护两个独立且不同的回购.

  • 为了维持两个独立且不同的回购,将回购B保留在回购A并且仅仅将回购B添加到回购A的`.gitignore`是不是没有意义? (21认同)
  • 对于git子模块和git子树的混淆程度,这是一个有效的答案. (5认同)
  • 我将 git 存储库分开,并将对 REPO-B 所做的更改复制到嵌套在 REPO-A 中的 REPO-B(不带 .git)副本中。我用 rsync 来做到这一点。对 REPO-B 进行任何更改后,我运行 `rsync -avh --delete --exclude='.git' REPO-B/ REPO-A/REPO-B-copy/` (4认同)

kub*_*ubi 25

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

但是,我不建议这样做.每次更改文件并在Repo-B中提交时,您都必须在Repo-A中提交.Repo-B中的分支将混乱Repo-A并且Repo-A中的分支将是不稳定的(无法删除文件夹等).子模块绝对是最佳选择.

  • 你不能简单地将REPO-B添加到/REPO-A/.gitignore吗? (44认同)
  • 我刚刚实现了这个确切的场景.我在子文件夹中有一些未压缩的CSS文件,我不想将其推送到远程仓库,所以它在我的.gitignore中.但我确实希望在本地跟踪这些文件的更改.我在文件夹中设置了一个包含未压缩文件的repo,并将所有文件添加到该repo中.父回购仍然会忽略它,但我可以跟踪子回购中的更改.建议与否,这个解决方案对于某些情况是关键. (16认同)
  • @mikkelbreum我有完全相同的想法.我们目前正在为我们的主项目使用subverion,并在其中一个子文件夹中使用git repo.使用SVN我刚刚将带有git repo的文件夹添加到svn:ignore属性中,我问自己是否可以使用git执行相同的操作. (2认同)
  • 好吧,我不明白为什么在父repo的忽略列表中添加一个嵌套的git repo应该不起作用..但同时我感觉必须有一些我没有想过的捕获,因为这种方法是很少看到建议,很多人不鼓励嵌套git回购. (2认同)

Iac*_*hus 13

您可以使用.gitignoreA存储库中的文件(忽略B),但首先确保该B存储库当前未被跟踪:.gitignore在添加第二个B存储库之前提交父存储库。

  • OP特别询问如何推送Repo A的所有内容,大概包括Repo B,所以这是行不通的。 (2认同)

小智 6

您可以通过使用“git-subrepo”来实现您想要的(REPO-A 存储库包含所有文件,包括文件夹 REPO-B 中的文件,而不仅仅是引用):

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

如果您的某些贡献者没有安装 subrepo 命令,它仍然有效;他们将看到完整的文件夹结构,但无法提交对子存储库的更改。