Git。推送不处理时忽略文件。git/info/exclude

Git. Ignore files when push does not take care of .git/info/exclude

我有一个具有这种结构的回购协议:

/github_folder
|_A
|_B

所以有两个文件夹:A 和 B

我只在文件夹 A 中工作。 团队的其他人在文件夹B中工作。

我开始工作了。 我进行拉动,进行更改,然后进行提交和推送。 一切都好。 这是由在文件夹 A 中生成新文件的自动过程完成的。

当我的自动进程未结束并尝试进行推送时,另一个人将文件夹 B 中的更改推送到存储库时,问题就出现了。 它说我有与 repo 不同的本地更改。

这是 git 的正常行为。

为了避免这种情况,我尝试将 .git/info/exclude 与以下内容一起使用:

B/

但问题依旧

所以我在推送之前尝试了这个:

git update-index --skip-worktree <FILE>

对于文件夹 B 中的每个文件。

但问题依旧。

另外,如果我这样做:

git check-ignore <FILE_INSIDE_B>

我得到一个空的响应。

这样做:

git rm --cached <FILE>

不是解决方案,因为它会删除存储库中的文件。

所以,最大的问题是:

如何在推送时保留文件夹B中的内容?

谢谢!

Some persons tells me that perhaps a solution is work with 2 repositories: one for folder A and another for B, but this not good for people working in B that also needs to only read contents in A.

这仍然是推荐的方法:

  • 主存储库,其中您将 A 和 B 声明为子模块,A 和 B 是它们自己的存储库,using git filter-repo
  • 每个子模块设置为track the main branch
  • 您可以在 A 工作,并且仅推送 A
  • 您可以阅读 B,因为父存储库将检出 A 和 B 子模块存储库。

如果您要推送到 A/ 的修改取决于 B/ 的内容(例如:如果您提到的生成文件将 B/ 中的一些文件作为输入) , 那么您将需要更新 B/ 的内容,并重新开始您的生成。


如果您知道您的流程根本不依赖于 B/,那么您可以在推送之前简单地更新 B/ 部分。

您可以通过与更新的作品合并来做到这一点:

git fetch origin
git merge origin/mainbranch

或者通过将您的工作重新定位在更新的远程之上:

git fetch origin
git pull origin/mainbranch

如果你的本地分支设置为跟踪origin/mainbranch,第一个相当于git pull,第二个相当于git pull --rebase
您还可以设置 git config pull.rebase truegit pull 始终表现为 git pull --rebase.