让Git对我的变化视而不见的更好方法

时间:2010-02-12 02:46:48

标签: git filter patch config

是否有一些更简洁的方法让Git忽略我的一些更改而从不提交它们? .gitattributes:

config_to_be_deviated.xml filter=qqq

的.git /配置:

[filter "qqq"]
 clean = "perl -ne 'print unless /git_please_dont_look_here/'"
 smudge = (Q=$(mktemp) && cat > $Q && patch -s $Q < /tmp/pp && cat $Q && rm $Q)

patch / tmp / pp在每行中添加了我的更改“git_please_dont_look_here”。 在将文件存入存储库之前,Git会删除所有这些行,并在签出时读取我的更改;我可以继续添加并向config_to_be_deviated.xml提交有用的更改,但Git不会看到补丁中的更改。

5 个答案:

答案 0 :(得分:1)

将它们放入单独的文件中,忽略git中的文件并将其连接到您的构建中,以便将其包含在内?

答案 1 :(得分:1)

尝试git update-index --assume-unchanged --<path>。对于源代码管理下的文件,它就像gitignore一样。该功能的最初目的是提高git检查修改在包含大量文件的文件夹中的性能。这是doco

  

- 假定-不变
  --no-assume-unchanged

     

当指定这些标志时,记录的对象名称为   路径未更新。相反,这些   选项设置和取消设置“假设   没有改变“路径的位。当   “假设未改变”位是开启的,git   停止检查工作树文件   对于可能的修改,所以你   需要手动取消设置该位来判断   更改工作树时git   文件。这有时候很有帮助   与一个大项目合作   lstat非常慢的文件系统(2)   系统调用(例如cifs)。

     

此选项也可用作忽略的粗略文件级机制   跟踪文件中未提交的更改   (类似于.gitignore的用途   未跟踪的文件)。你应该记住   一个显式的git添加操作   仍然会导致该文件   从工作树上刷新。混帐   如果它会失败(优雅地)   需要在索引中修改此文件   例如合并时提交;从而,   如果假定未跟踪的文件是   改变上游,你需要   手动处理这种情况。

答案 2 :(得分:1)

看起来这种“过滤”方法最适合我。

优点:

  1. 每次都不需要使用自定义脚本或特殊命令。一次性设置。
  2. 历史或藏匿中没有额外的提交。清理差异和补丁。
  3. 犯下错误的事情。
  4. 相对容易做出轻微偏差(比如覆盖配置文件中的某些端口号),就像简单的sed脚本一样,用于涂抹和清洁。
  5. 缺点:

    1. 每次Git读取或写入文件时都会运行过滤程序,它可能很慢(特别是在Windows中)。

答案 3 :(得分:1)

  • 将规范的默认配置放在git树中,但不用它来玩游戏。它在树中,如果你对它进行了修改,它们就会被提交。
  • 软件会查找默认配置,但它也会在开发人员的主目录中查找配置。如果它找到两者,则合并两者。开发人员配置文件中的任何配置项都会覆盖默认配置文件中的配置项。

现在跟踪默认配置,并且您的默认配置自定义不是。

答案 4 :(得分:0)

我不是都熟悉git。对于Mercurial,我使用补丁队列(MQ)或搁置(类似于git stash)来处理这类事情。

git stash可以方便地使用,如果您是“可本地化”的信息很容易找到(例如,所有在单个配置文件中)。

使用补丁队列有点复杂,但一旦设置正确,因为您可以透明的推/弹方式管理可本地化的信息。您可以在git here on SO上找到补丁队列列表。