如何在拉取远程代码前保留并忽略creds.json文件的变更?
我来帮你搞定这个跨远程仓库同步时保留本地配置文件的问题——这种场景其实挺常见的,咱们一步步排查修复:
你之前加了.gitignore和skip-worktree但没生效,大概率是因为creds.json已经被提交到Bitbucket的远程仓库里了。Git对已追踪的文件,.gitignore是不起作用的,skip-worktree也只能阻止本地变更被提交,没法阻止远程的文件同步下来。
先执行这个命令验证:
git ls-files --error-unmatch creds.json
如果没报错,说明文件确实被Git追踪了。这时候得先把它从Git的追踪记录里移除,但保留本地的文件:
git rm --cached creds.json
接着提交这个变更并推送到Bitbucket,让远程仓库也停止追踪它:
git commit -m "Stop tracking creds.json in repo" git push bitbucket <你的分支名称>
.gitignore和skip-worktree的配置 现在远程仓库不再追踪这个文件了,咱们把它正式加入.gitignore,确保后续不会被误提交:
echo "creds.json" >> .gitignore git add .gitignore git commit -m "Add creds.json to gitignore" git push bitbucket <你的分支名称>
然后重新设置skip-worktree标记,确保Git完全忽略本地文件的变更:
git update-index --skip-worktree creds.json
你可以用这个命令检查标记是否生效:
git ls-files -v | grep ^S
如果输出里有creds.json,说明设置成功了。
因为你还要往GitHub推送代码,得确保GitHub的仓库也停止追踪这个文件。把刚才的变更推送到GitHub:
git push github <你的分支名称>
这样两个远程仓库都不会再管这个文件,之后从Bitbucket拉取代码时,不会覆盖你的本地creds.json;往GitHub推送时,也不会把本地的creds.json推上去。
要是偶尔拉取代码时,Git自动生成了一个远程版本的creds.json,别慌——先确保你本地的版本有备份,然后删除拉下来的版本,恢复自己的文件后,重新执行git update-index --skip-worktree creds.json就行。
内容的提问来源于stack exchange,提问作者Daniel Harris

