我希望我的项目中的特定配置文件在本地环境中具有不同于config的环境,而且我不想更改或隐藏/每次我的东西推到主存储库是否git'skipworktree'阻止文件从git pull更新
时间,我发现,使用弹出文件:
git update-index --skip-worktree <file>
让我这样做。
虽然我有一个问题,在其他人更改配置文件并将更改推送到主存储库的场景中,下次我将更改导入到本地配置文件时,会更新该配置文件吗?
我希望我的项目中的特定配置文件在本地环境中具有不同于config的环境,而且我不想更改或隐藏/每次我的东西推到主存储库是否git'skipworktree'阻止文件从git pull更新
时间,我发现,使用弹出文件:
git update-index --skip-worktree <file>
让我这样做。
虽然我有一个问题,在其他人更改配置文件并将更改推送到主存储库的场景中,下次我将更改导入到本地配置文件时,会更新该配置文件吗?
如果配置文件是没用的,做版本控制(因为你需要配置不同的地方),你最好忽略该文件中.gitignore
:
touch .gitignore
echo <file> >> .gitignore
git rm <file> --cached
git add .
git commit -m 'message'
git push
之所以不如下使用git update-index --skip-worktree <file>
:
git pull
时,配置文件将更新为远程。git pull
,git会检测到冲突和配置文件显示错误为:error: Your local changes to the following files would be overwritten by merge: file Please commit your changes or stash them before you merge. Aborting
error: Your local changes to the following files would be overwritten by checkout: file Please commit your changes or stash them before you switch branches. Aborting
git update-index --skip-worktree
通常用于临时使用。您还可以比较使用git update-index --skip-worktree
here。
感谢您的详细解答,这让我感到困惑,因为我曾经假设将文件标记为skip-worktree会使其被git pull和branch checkout忽略。 如果是这种情况,我不明白git update-index的用途--skip-worktree – Snedden27
Skip-worktree假装它的工作目录版本是最新的,而是读取索引版本。但是当你使用'git pull'或'git checkout branch'时,当前的索引正试图放弃,所以skip-worktree将停止工作。 –
这里的文档有点不清楚;在我的测试中(使用版本2.12.0.windows.1)如果远程包含我标记为--skip-worktree
的文件的更改,则无法拉动。 (我得到了覆盖本地修改的操作的常见错误,我尝试了各种方法来解决这个问题,但唯一有效的方法是清除skip-worktree位,这当然会让你回到保护当地的变化。)
我个人认为这个解决方案非常混乱。 (a)特定于环境的设置不受源代码控制(即存储在.gitignore
覆盖的路径或存储在回购站之外的路径),或者(b)您保留每个环境的文件版本而选择“主动”的方式不受源控制。
我不能gitignore该文件。 现在我正在存储我的本地文件,所有的东西都拉出来,一旦拉出来就弹出存储回来。但我希望我能以更简单的方式做到这一点 – Snedden27
好吧,如果您坚持依靠手动程序来避免提交您认为是本地的更改,那么只能是两次失败之间的时间问题。哦,但你足够好,永远不会犯错误?凉。是否每个人都与你一起工作(或永远)?看,我不在乎你在回购中做了什么,但是不要问一个问题,然后嗤之以鼻什么是处理问题的正确方法。 (您是否注意到其他答案实际上给出了完全相同的建议?) –
它不,但[设置稀疏结帐呢](https://stackoverflow.com/a/37066742/2303202) – max630