如何在每次从 master 拉取后将本地更改应用到 git repo 而无需推送到 master

How to apply local changes to git repo after every pull from master without ever pushing to master

我的开发设置与团队中的其他开发人员完全不同 - mac vs linux - docker vs 流浪者

每次拉出一个新分支时,我都必须对配置文件和 docker 相关文件进行大量更改,以使我的开发环境正常运行。

我需要避免将它们推送到我的工作分支,因为它们无法合并到主分支中。

目前我将这些文件关闭 git add,然后在每次切换分支并执行拉取时手动将它们添加回来。

以下 SO 问题表明我可以 git stash 然后 git stash apply How to keep the git local changes without commit and apply to different repos after switch

我认为如果我保持我的 git 存储整洁并且最后一个仅限于我的开发更改,那将是可行的。我想知道是否有更好的方法来处理这个工作流程。

我可以将这些更改保存在 dev-setup 分支中并以类似于 stash 方法的方式使用吗?

一种解决方案是将这些文件添加到本地忽略的文件中。 它位于 .git/info/exclude.
它的工作方式与通常的 .gitignore 相同(请参阅 https://git-scm.com/docs/gitignore)。

如果文件是在上游更新的,拉取后你将看不到本地文件有任何修改。 在将这些文件从此排除文件中删除之前,您将无法提交对这些文件的任何更改。

除了我之前接受的答案之外,我还添加了一个答案,只是为了汇集实施这就是我的环境的所有额外知识。

保留本地开发者版本的git忽略文件以处理个人开发设置

这是关于 different types of gitignore 的超级有用 link:本地(个人)、共享或全局(所有存储库)。

基本上,为了保持您自己的本地文件版本不受 git 的推送和拉取影响,您需要:

  • 将相关文件添加到.git/info/exclude中的个人排除文件(感谢@Abel 接受的答案)

现在剩下的过程会有所不同,具体取决于:

您想从远程服务器删除文件(这将影响存储库的所有用户)并只保留在本地:

  • 从 git 缓存中删除它们(如果它们已经暂存)并在下一次推送时远程删除 git rm --cached file_name

您想不理会远程文件,git'forget'您的本地版本及其关联的远程更改

  • 使用 git reset -- file_name
  • 将它们从暂存中移除
  • 使用 git update-index --skip-worktree <file_name>
  • 从 git 工作流中删除这些

这个 Stack Overflow 问答特别有用 Git - Difference Between 'assume-unchanged' and 'skip-worktree'

使用 skip-worktree

时有用的代码片段
  • 使用git ls-files -v . | grep ^S
  • 将文件添加回工作树使用 git update-index --no-skip-worktree <file_name>