代码之家  ›  专栏  ›  技术社区  ›  Vi.

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

  •  2
  • Vi.  · 技术社区  · 15 年前

    有没有更干净的方法可以让Git忽略我的一些更改而不提交它们? GITQuale:

    config_to_be_deviated.xml filter=qqq
    

    git/CONFIG:

    [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)
    

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

    5 回复  |  直到 15 年前
        1
  •  1
  •   stefanB    15 年前

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

        2
  •  1
  •   Igor Zevaka    15 年前

    尝试 git update-index --assume-unchanged --<path> . 对于受源代码管理的文件,它的作用类似于gitignore。不过,这个特性的最初目的是提高git在包含大量文件的文件夹中检查修改的性能。这里是 doco :

    --假设不变
    --不假设不变

    当指定这些标志时,为 路径未更新。相反,这些 选项设置和取消设置“假设 路径的“位不变”。当 “假设不变”位是开的,git 停止检查工作树文件 为了可能的修改,所以你 需要手动复位位才能显示 当你改变工作树的时候 文件。这有时会有帮助,当 与一个大项目合作 具有非常慢的lstat的文件系统(2) 系统调用(例如CIFS)。

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

        3
  •  1
  •   Vi.    15 年前

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

    赞成的意见:

    1. 不需要每次都使用自定义脚本或特殊命令。一次性设置。
    2. 历史和藏匿中没有额外的承诺。清除差异和补丁。
    3. 做错事的风险很低。
    4. 相对容易做出细微的偏差(比如覆盖配置文件中的一些端口号),比如简单的SED脚本,既适用于污点,也适用于清除。

    欺骗:

    1. 每次git读取或写入文件时,过滤程序都会运行,速度可能很慢(尤其是在Windows中)。
        4
  •  1
  •   Wayne Conrad    15 年前
    • 将规范的默认配置放在Git树中,但不要用它玩游戏。它在树中,如果您对它进行更改,它们将被提交。
    • 软件会查找默认配置,但也会在开发人员的主目录中查找配置。如果它同时找到两者,就将两者合并。在开发人员的配置文件中找到的任何配置项都将覆盖默认配置文件中的配置项。

    现在,默认配置被跟踪,而默认配置的自定义设置则不被跟踪。

        5
  •  0
  •   Community CDub    7 年前

    我对吉特不是很熟悉。对于mercurial,我使用一个补丁队列(mq)或架子(类似于git stash)来处理这些事情。

    git stash 如果您是“可本地化的”信息,那么使用起来很方便(例如,所有信息都在一个配置文件中)。

    使用补丁队列有点复杂,但是一旦设置正确,就会变得更好,因为您可以以透明的push/pop方式管理可本地化的信息。您可以在git上找到补丁队列的列表。 here on SO .