代码之家  ›  专栏  ›  技术社区  ›  Felixyz

忽略已签入目录的内容?

  •  215
  • Felixyz  · 技术社区  · 15 年前

    我有一个Git存储库,它只用于保存几个项目中使用的图形和声音文件。它们都在一个目录中,没有子目录。现在,我刚刚创建了一个脚本,将这些资产从另一个具有多个级别子目录的结构化目录复制过来。

    现在我只希望(源)层次文件结构由git跟踪,而(目标)平面目录(所有文件都在一堆中)应该被忽略。

    我已将目标目录添加到.gitignore,但git仍在跟踪其中的更改。我想,如果我提交删除目标目录中的旧文件,Git可能会停止跟踪新内容(由脚本复制),但不会。

    如何让Git忘记目标目录?

    5 回复  |  直到 6 年前
        1
  •  506
  •   Gordon Wilson    15 年前

    此命令将导致git取消跟踪您的目录及其下的所有文件,而不实际删除它们:

    git rm -r --cached <your directory>

    这个 -r 选项导致删除目录下的所有文件。

    这个 --cached 选项使文件只从Git的索引中删除,而不是从工作副本中删除。默认情况下 git rm <file> 将删除 <file> .

        2
  •  69
  •   jone    12 年前

    如果需要跟踪文件(已签入),但不希望在本地存储库和远程存储库中保存该文件时跟踪该文件的进一步更改,可以使用以下方法完成:

    git update-index --assume-unchanged path/to/file.txt
    

    之后,对此文件的任何更改将不再显示在 git status .

        3
  •  4
  •   Stef    15 年前

    对于名为 blah/ 添加到git中后,以下两项似乎都可以忽略中的新文件 废话/ . 添加到.gitignore:

    blah 
    blah/*
    
        4
  •  0
  •   Steve    6 年前

    不知道这算不算什么,还是让我成为一个坏人,但我明白了。

    1. 我补充说 *Generated* 到根.gitignore文件
    2. 我提交了要作为generatedfile.whatever.ext保存的文件。 查克丁
    3. 我在签出后做了一个Git钩子来调用一个PowerShell脚本:

    dir *.CheckedIn -Recurse | %{ copy $_.FullName "$($_.FullName)".Replace("CheckedIn","") -EA SilentlyContinue}

    我确实觉得自己有点不好…但事实上它确实有效。

        5
  •  -1
  •   Felixyz    15 年前

    好的,看起来您必须首先使用完全空的目录(既不是旧文件也不是新文件)进行签入,之后添加的任何文件都将被忽略。如果在提交之前删除了旧文件添加和新文件,则新文件将添加到repo中,尽管它们应该被忽略。

    至少,在这种情况下,这对我有效。如果有人能更深入地了解正在发生的事情,那就更好了。