代码之家  ›  专栏  ›  技术社区  ›  Dean Hiller

git使用git-rm命令删除不在.gitignore中的文件

git
  •  0
  • Dean Hiller  · 技术社区  · 12 年前

    我有这样的结构

    SDI
    |-.gitignore
    \-webapp
    

    在SDI/webapp/app目录中,当我运行 git rm -r --cached . ,我看到这样的文件被删除

    rm 'webapp/app/views/MyStuff/myGroups.html'
    rm 'webapp/app/views/MyStuff/userAdd.html'
    rm 'webapp/app/views/MyStuff/userEdit.html'
    rm 'webapp/app/views/auth/Secure/login.html'
    rm 'webapp/app/views/errors/404.html'
    rm 'webapp/app/views/errors/500.html'
    rm 'webapp/app/views/main.html'
    rm 'webapp/app/views/tags/auth/check.tag'
    rm 'webapp/app/views/tags/generic.html'
    rm 'webapp/app/views/tags/text.html'
    

    我的 .gitignore contents 如下所示

    eclipse/
    tmp/
    bin/
    tools/play-1.2.5/framework/pym/
    

    为什么要删除我的所有文件?我确实有 git config file.mode false 与我过去做过的其他事情相比,这是这个存储库中唯一独特的事情。

    2 回复  |  直到 12 年前
        1
  •  4
  •   KingCrunch    12 年前
    • 中实际上并没有删除文件,它只是从索引中删除更改。您的工作空间保持不变。
    • 它这样做是因为你让它这么做。

    http://www.kernel.org/pub/software/scm/git/docs/git-rm.html

    从索引中删除文件 ,或从工作树和索引。git-rm不会仅从您的工作目录中删除文件。(没有选项可以仅从工作树中删除文件并将其保留在索引中;如果要这样做,请使用/bin/rm。)被删除的文件必须与分支的顶端相同,并且不能在索引中暂存对其内容的更新,尽管可以使用-f选项覆盖默认行为。当提供--cached时,暂存的内容必须与分支的顶端或磁盘上的文件相匹配,从而允许仅从索引中删除该文件。

    -r 在给定前导目录名时允许递归删除。

    --高速缓存的 使用此选项可以仅从索引中取消暂存和删除路径。工作树文件,无论是否修改,都将被单独保留。

    我不知道,你想实现什么(因为你没有告诉),但命令确实做到了,它应该做什么,以它应该的方式。

    .gitignore “just”告诉git在调用时不要向索引添加更改 git add 递归地(例如。 git add . git commit -a ),或在中显示 git status (可能还有其他工具,但这是最常见的用例)。因为无论如何都不应该暂存对此文件的更改, git rm 不会影响他们。

        2
  •  3
  •   Adam Dymitruk    12 年前

    它不是删除你的文件,而是取消它们的标记。您被忽略的文件将被忽略。所以不用担心。如果要删除被忽略的文件,可以

    git clean -xdf
    

    更新:

    如果你有一个你关心的文件,一个更安全的方法(如评论中所述)是

    git stash -u && git clean -xdf