【问题标题】:Git: Ignore tracked filesGit:忽略跟踪的文件
【发布时间】:2012-06-01 02:37:28
【问题描述】:

我在存储库中有一些跟踪文件,这些文件在构建代码时会自动修改。我不想取消跟踪它们,我只是不希望它们显示为已修改,也不希望它们在我 git add 时被暂存。

这可能吗?

【问题讨论】:

标签: git


【解决方案1】:

当然。

git update-index --assume-unchanged [<file> ...]

撤消并重新开始跟踪:

git update-index --no-assume-unchanged [<file> ...]

【讨论】:

  • 如果我对处于这种状态的文件进行修改,会发生什么情况?
  • @haymansfield 命令的帮助页面显示以下内容Git will fail (gracefully) in case it needs to modify this file in the index e.g. when merging in a commit; thus, in case the assumed-untracked file is changed upstream, you will need to handle the situation manually.
  • 有什么方法可以在克隆时应用--assume-unchanged?这样所有用户都会拥有这些文件,但不会在差异中看到对它们的本地更改。
  • @Tyler - 不,一旦文件被 git 跟踪,它将始终被跟踪,即使该文件出现在 .gitignore 中。我的用例类似于“这是一个文件的基本模板,您将在其中存储您的凭据,现在永远不要提交它”。
  • @watbywbarif 我将命令 git update-index --no-assume-unchanged $(git ls-files $(git rev-parse --show-toplevel)) 设置为 git 别名。每当我怀疑这是其中的一些恶作剧时,我都会这样做。
【解决方案2】:

另一种方法(来自 Seth Robertson 现在已删除的答案,但我发现它很有帮助,因此重新启用它)是维护一个“跟踪”模板文件,然后拥有它的本地未跟踪版本,例如:“config.sample.ini " 或 "config.ini.template" 请参阅 https://gist.github.com/canton7/1423106 以获取完整示例。

那么,如果文件在 git 等中发生更改,则不会有任何问题,您可以在本地未跟踪的文件上使用 .gitignore(最终)。

【讨论】:

    【解决方案3】:

    在过滤命令中使用 git 属性和 %f 的另一种解决方案:

    git config filter.orig.clean "cat %f.orig"
    cp filename filename.orig
    echo "filename filter=orig" >> .git/info/attributes
    echo "filename.orig" >> .git/info/exclude
    

    【讨论】:

    • 您能否详细说明这意味着什么以及它正在做什么?
    • 这为从具有原始文本的“.orig”文件中读取内容的文件添加了过滤器
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-09-29
    • 1970-01-01
    • 1970-01-01
    • 2015-09-27
    • 2015-11-21
    • 1970-01-01
    • 2011-02-03
    相关资源
    最近更新 更多