Git.当push不考虑.git/info/exclude时,忽略文件



我有一个这样结构的repo:

/github_folder
|_A
|_B

有两个文件夹:A和B

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

我开始工作。我拉一下,修改一下,然后提交,再推一下。一切都很好。这是由在文件夹a中生成新文件的自动过程完成的。

当另一个人在我的自动过程还没有结束的时候,把更改推送到B文件夹的repo,并试图推送时,问题就出现了。它说我有不同于回购的本地更改。

这是git的正常行为。

为了避免这种情况,我尝试使用.git/info/exclude来包含以下内容:

B/

但问题仍然存在。

所以我在做push之前尝试了这个:

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

查找b文件夹中的每个文件

但问题依然存在。

如果我这样做:

git check-ignore <FILE_INSIDE_B>

我得到一个空的响应。

这样做:

git rm --cached <FILE>

不是一个解决方案,因为它将删除repo上的文件。

所以,最大的问题是:

如何保持在repo的文件夹B的内容时做推送?

谢谢!

有些人告诉我,也许一个解决方案是使用2个存储库:一个用于文件夹a,另一个用于B,但这对于在B中工作的人来说并不好,也只需要读取a中的内容。

这仍然是推荐的方法:

  • 主存储库,其中声明A和B为子模块,其中A和B是它们自己的存储库,使用git filter-repo
  • 每个子模块被设置为跟踪main分支
  • 可以在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 true使git pull始终作为git pull --rebase

相关内容

  • 没有找到相关文章

最新更新