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 true
让 git pull
始终表现为 git pull --rebase
.
我有一个具有这种结构的回购协议:
/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 true
让 git pull
始终表现为 git pull --rebase
.