【问题标题】:Git ignore files per branch or remote repositoryGit 忽略每个分支或远程存储库的文件
【发布时间】:2014-03-11 19:11:52
【问题描述】:

二手

Git, Github.com

问题

我有一个包含文件的项目:A、B、C、D、E。

  • 我希望团队 1 工作:A、C、D(不想将 B、E 暴露给他们)
  • 团队 2 处理:B、D、E(不想将 A、C 暴露给他们)
  • 我想从事以下工作:A、B、C、D、E

然后我拉取 Team 1 的工作并将 A、C、D 与我的工作合并,然后拉出 Team 2 的工作并将 B、D、E 与我的工作合并。

如果需要,我可以为每个团队创建一个 repo。

不工作

我已阅读所有文章并尝试了他们提供的所有内容。

  • 子模块不适合我 - 文件位于不同的位置,我需要为每个开发团队忽略不同的一堆文件
  • Excludesfile 每个分支不起作用
  • .gitignore 拉的时候会删除那2-3个文件

我不想相信没有简单而优雅的解决方案只是忽略每个推送或分支或远程 repo 或其他东西的一些文件......

补充

  • 我不能把一个项目分成几个项目

【问题讨论】:

  • 当你说你想“忽略每次推送的文件”时,你是说你不想为这些文件推送本地更改,或者你希望远程存储库拒绝/忽略对这些文件的更改/目录?
  • 假设我有一些秘密文件想提供给我的第一支队伍,但不会显示给第二支队伍。反之亦然。然后从第一队和第二队拉出来,不要删除这些文件,而是与我对这些文件的本地更改合并。

标签: git github ignore collaboration


【解决方案1】:

我会创建三个项目:

  • D(通用,所有人可见)
  • A 和 C(对您和团队 1 可见),依赖于 D
  • B 和 E(对您和团队 2 可见),依赖于 D

如果我设想需要更精细的访问控制,将 A 与 C 或 B 与 D 分开,我会进一步拆分项目。

我不认为我会尝试使用忽略文件进行访问控制。

【讨论】:

  • 这是真的,但听起来并不容易维护。你的意思是这个解决方案是唯一的还是一个最佳实践?我必须通过 git 将该项目部署到生产环境中,因此我无法将我的项目拆分为单独的项目。
【解决方案2】:

Git 没有访问控制,因此:“git”、“秘密文件”和“易于维护”只是没有混得不好。如果要添加访问控制层,请查看 gitoliteGit on the server - gitolite

您将需要进行试验,但您可能可以从一个空的 repo 开始,并为每个团队建立一个分支。但是请注意,您不希望文件出现在任何相应的分支历史记录中。例如,您不希望拥有一个包含所有文件的 master 分支,将其分支为 team1 分支,然后是 git rm 文件。 “秘密”文件将保留在分支历史记录中,限制访问也无济于事。因此,您要么必须对跨分支的文件进行明确分离,要么有一个清理脚本,每次您决定合并时都应用git filter-branch 来删除文件,并冒着再次引入文件的风险。

详细说明最后一个例子。假设您将team2 工作合并到您的主分支中,现在想与team1 分享整体进度。您不能简单地将master 合并到team1,但是您可以将master 分支为master-sanitized,运行filter-branch 以删除team1 不应该看到的文件,然后将master-sanitized 合并到team1 ,丢弃临时分支。然而,所有这一切都不会让您免于重写提交实际上是使用新的 sha1-s 重新引入它们的事实,因此您的合并将是与-s ours-X theirs 解决冲突的持续痛苦。

【讨论】:

  • 看来我终于不得不相信这里没有优雅的解决方案。谢谢。
猜你喜欢
  • 2014-06-20
  • 2011-01-12
  • 1970-01-01
  • 2011-05-25
  • 2013-02-21
  • 2015-03-25
  • 1970-01-01
  • 2023-03-18
  • 2014-11-27
相关资源
最近更新 更多