3

有没有一些更简洁的方法可以让 Git 忽略我的一些更改并且从不提交它们?.git 属性:

config_to_be_deviation.xml 过滤器=qqq

.git/配置:

[过滤“qqq”]
 clean = "perl -ne '打印除非 /git_please_dont_look_here/'"
 涂抹 = (Q=$(mktemp) && cat > $Q && patch -s $Q < /tmp/pp && cat $Q && rm $Q)

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

4

5 回答 5

2

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

优点:

  1. 无需每次都使用自定义脚本或特殊命令。一次性设置。
  2. 历史或存储中没有额外的提交。清理差异和补丁。
  3. 犯错的风险很低。
  4. 相对容易做出微小的偏差(例如覆盖配置文件中的某些端口号),例如用于涂抹和清洁的简单 sed 脚本。

缺点:

  1. 每次 Git 读取或写入文件时都会运行过滤程序,它可能会很慢(尤其是在 Windows 中)。
于 2010-02-12T14:52:23.730 回答
1

试试git update-index --assume-unchanged --<path>。对于受源代码控制的文件,它的作用类似于 gitignore。不过,该功能的最初目的是提高 git 检查包含大量文件的文件夹中的修改的性能。这是文档

--assume-unchanged
--no-assume-unchanged

指定这些标志时,不会更新为路径记录的对象名称。相反,这些选项设置和取消设置路径的“假设不变”位。当“假设不变”位打开时,git 停止检查工作树文件是否有可能的修改,因此您需要手动取消设置该位以告诉 git 当您更改工作树文件时。这在处理具有非常慢的 lstat(2) 系统调用(例如 cifs)的文件系统上的大型项目时有时会很有帮助。

此选项也可以用作粗略的文件级机制,以忽略跟踪文件中未提交的更改(类似于 .gitignore 对未跟踪文件所做的事情)。您应该记住,显式 git add 操作仍会导致文件从工作树中刷新。如果 Git 需要修改索引中的这个文件,例如在提交合并时,Git 将失败(优雅地);因此,如果假定的未跟踪文件在上游发生更改,您将需要手动处理这种情况。

于 2010-02-12T03:08:30.027 回答
1

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

于 2010-02-12T02:55:04.057 回答
1
  • 将规范的默认配置放在 git 树中,但不要玩任何游戏。它在树中,如果您对其进行更改,它们将被提交。
  • 该软件会查找默认配置,但它也会在开发人员的主目录中查找配置。如果两者都找到,则将两者合并。在开发人员的配置文件中找到的任何配置项都会覆盖默认配置文件中的配置项。

现在默认配置被跟踪,并且您对默认配置的自定义没有。

于 2010-02-12T15:10:51.773 回答
0

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

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

使用补丁队列稍微复杂一些,但是一旦正确设置就更优越了,因为您可以以透明的推送/弹出方式管理可本地化的信息。您可以在 SO上的 git 上找到补丁队列列表。

于 2010-02-12T14:21:17.963 回答