Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/github/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Git 如何防止签入文件覆盖本地版本?_Git_Github - Fatal编程技术网

Git 如何防止签入文件覆盖本地版本?

Git 如何防止签入文件覆盖本地版本?,git,github,Git,Github,我对签入文件进行了一些特定于平台的修改。当我从远程分支合并时,如何强制git保留本地版本而忽略远程版本?基本上,就像git一样,忽略,但对于存储库已经跟踪的文件 用例是,我推到一个分支,然后在不同的平台上拉这个分支进行测试。第一次在每个平台上进行测试需要运行./configure脚本,该脚本使用特定于平台的自定义修改了一些文件。由于这些更改是自动生成的,所以我不想将它们提交到历史记录中。通常我会将这些文件添加到.gitignore,但是,其中一些文件是原始存储库的一部分,因此git ignore

我对签入文件进行了一些特定于平台的修改。当我从远程分支合并时,如何强制git保留本地版本而忽略远程版本?基本上,就像git一样,忽略,但对于存储库已经跟踪的文件


用例是,我推到一个分支,然后在不同的平台上拉这个分支进行测试。第一次在每个平台上进行测试需要运行./configure脚本,该脚本使用特定于平台的自定义修改了一些文件。由于这些更改是自动生成的,所以我不想将它们提交到历史记录中。通常我会将这些文件添加到.gitignore,但是,其中一些文件是原始存储库的一部分,因此git ignore将被忽略。

这里有一个可能的解决方案

假设
git merge
之前的原始头是A。合并后,运行
git checkout A——要保存的文件的路径,该路径将文件恢复为A的状态

但这使得工作树不干净。如果运行
git status
,您会发现索引中的文件已更改。我认为这是不可避免的,除非你再做一次承诺


由于原始头由git中的变量ORIG\u HEAD引用,因此您可以始终运行希望保留的文件的路径,而不考虑A的实际sha1。

不要签入它们。以其他名称检入模板,并忽略活动文件的名称


如果您的项目需要一个名为(例如)
config.txt
的文件,请将该文件名放入
.gitignore
,然后将一个名为
config.sample.txt
的文件签入存储库。如果你想变得花哨,如果文件还不存在,您可以让应用程序自动将文件从
config.sample.txt
复制到
config.txt

这可能是的副本,因为如果不提交特定于平台的更改,第一个答案似乎是最好的解决方案。

我需要提交所有更改吗在./configure之后发生的特定于平台的修改在我可以签出这些文件之前运行?我不清楚您的要求,但我认为这取决于具体情况。您可以提交任何要保留和恢复的更改。我正在分叉一个现有项目,这些文件已经签入。它们正在被./configure脚本修改,因此可能需要一些东西,以便将文件从当前名称更改为新名称,并修改
configure
脚本以复制文件,如我在回答中所述。这是将它们放入git exclude文件的方法(
.git/info/exclude
)适用于您的用例?这是否可以防止签入文件覆盖本地版本?只有在您未跟踪修改/生成的文件时才会这样做。如果您希望跟踪这些文件,则
跳过工作树
标志可能会有所帮助。有关示例,请参阅此答案及其链接参考。顺便说一句,如果您碰巧在Mac上,这(
git stash&&git pull&&git stash pop
)是塔楼在拉动时对阶段性和非阶段性更改所做的操作。@tedmiston你怎么知道塔楼就是这样做的?我试图找出如何在没有任何更改的情况下查看塔楼命令日志luck@YaroslavBulatov他们似乎并没有将所有内容都打印到活动日志中,尽管我相信描述执行这些命令的提示我想他们的支持是非常好的,如果你想要一个明确的确认,我相信他们会提供的。