tro*_*ock 2429 git version-control caching gitignore git-rm
我有一个已经初始化的Git存储库,我添加了一个.gitignore
文件.如何刷新文件索引以便忽略我想忽略的文件?
tro*_*ock 4029
要取消已经添加/初始化到存储库的单个文件,即停止跟踪文件但不从系统中删除它:git rm --cached filename
要解开现在位于您的所有文件.gitignore
:
首先提交任何未完成的代码更改,然后运行以下命令:
git rm -r --cached .
Run Code Online (Sandbox Code Playgroud)
这将从索引(暂存区域)中删除所有已更改的文件,然后运行:
git add .
Run Code Online (Sandbox Code Playgroud)
承诺:
git commit -m ".gitignore is now working"
Run Code Online (Sandbox Code Playgroud)
要撤消git rm --cached filename
,请使用git add filename
.
确保在运行之前提交所有重要更改
git add .
否则,您将丢失对其他文件的任何更改.
dyo*_*dji 577
如果您尝试忽略对已在存储库中跟踪的文件的更改(例如,您需要为本地环境更改的dev.properties文件,但您永远不想检查这些更改),而不是您想要执行的操作是:
git update-index --assume-unchanged <file>
Run Code Online (Sandbox Code Playgroud)
如果您想再次开始跟踪更改
git update-index --no-assume-unchanged <file>
Run Code Online (Sandbox Code Playgroud)
如果你需要通过 git-reset(via),还要查看update-index的选项skip-worktree
和no-skip-worktree
选项
更新:由于人们一直在询问,这是一个方便的(以及下面评论的更新)别名,用于查看当前工作区中当前"忽略"( - 保持未更改)的文件
$ git config --global alias.ignored = !git ls-files -v | grep "^[[:lower:]]"
Run Code Online (Sandbox Code Playgroud)
pag*_*ibe 358
要取消已经添加/初始化到存储库的文件,即停止跟踪文件但不从系统中删除它: git rm --cached filename
Ant*_*bbs 83
是的 - .gitignore
系统只忽略当前不受git版本控制的文件.
即如果您已经添加了一个名为test.txt
using 的文件git-add
,那么添加test.txt
到.gitignore
仍然会导致test.txt
跟踪更改.
您必须git rm test.txt
首先提交更改.只有这样test.txt
才能忽略变化.
Mik*_*sen 52
删除.gitignore中的尾部空格
另外,请确保.gitignore中没有尾随空格.我得到了这个问题,因为我正在寻找答案,然后我有一种有趣的感觉,我应该打开编辑器,而不仅仅是cat'ing .gitignore.从最终删除了一个额外的空间和噗现在的工作:)
Orl*_*ndo 40
我按照这些步骤
git rm -r --cached .
git add .
git reset HEAD
Run Code Online (Sandbox Code Playgroud)
之后,git删除应忽略的所有文件(在我的情况下为*.swp).
prz*_*adu 37
如果要停止跟踪文件而不删除本地系统中的文件,我更喜欢忽略config/database.yml
文件.只需尝试:
git rm --cached config/database.yml
# this will delete your file from git history but not from your local system.
Run Code Online (Sandbox Code Playgroud)
现在,将此文件添加到.gitignore
文件并提交更改.从现在开始,对config/database.yml所做的任何更改都不会被git跟踪.
$ echo config/database.yml >> .gitignore
Run Code Online (Sandbox Code Playgroud)
谢谢
Ahm*_*ais 30
到处复杂的答案!
只需使用以下内容
git rm -r --cached .
Run Code Online (Sandbox Code Playgroud)
它将从原点删除您要忽略的文件,而不是从计算机上的主文件中删除!
之后只需提交并推送!
Mar*_*ore 28
要从跟踪中删除一些特定文件:
git update-index --assume-unchanged path/to/file
Run Code Online (Sandbox Code Playgroud)
如果您想再次开始跟踪它:
git update-index --no-assume-unchanged path/to/file
Run Code Online (Sandbox Code Playgroud)
Ima*_*adi 27
正如dav_i所说,为了将文件保存在repo中并将其从更改中删除而不创建额外的提交,您可以使用:
git update-index --assume-unchanged filename
Run Code Online (Sandbox Code Playgroud)
ave*_*dev 23
不知道'回答'命令做了什么,我跑了,很让我感到沮丧.它以递归方式从git仓库中删除每个文件.
Stackoverflow救援...... 如何恢复"git rm -r."?
git reset HEAD
Run Code Online (Sandbox Code Playgroud)
诀窍,因为我有未提交的本地文件,我不想覆盖.
kin*_*ero 20
我遇到的另一个问题是我发布了内联评论.
tmp/* # ignore my tmp folder (this doesn't work)
Run Code Online (Sandbox Code Playgroud)
这很有效
# ignore my tmp folder
tmp/
Run Code Online (Sandbox Code Playgroud)
Ara*_*orn 19
如果文件已在版本控制中,则需要手动删除它们.
umo*_*mop 12
感谢您的回答,我能够编写这个小小的单行程来改进它.我在我的.gitignore和repo上运行它,没有任何问题,但是如果有人看到任何明显的问题,请发表评论.这应该git rm -r --cached
来自 .gitignore
:
cat $(git rev-parse --show-toplevel)/.gitIgnore | sed"s // $ //"| grep -v"^#"| xargs -L 1 -I {}查找$(git rev-parse --show-toplevel)-name"{}"| xargs -L 1 git rm -r --cached
请注意,你会得到很多fatal: pathspec '<pathspec>' did not match any files
.这仅适用于尚未修改的文件.
小智 9
我发现.gitignore有一个奇怪的问题.一切都到位,似乎是正确的.我的.gitignore被"忽略"的唯一原因是,行结尾是Mac格式(\ r \n).所以在使用正确的行尾保存文件后(在vi中使用:set ff = unix)一切都像魅力一样!
这里没有提到的另一个问题是,如果你在Windows记事本中创建了你的.gitignore,我发现它在其他平台上看起来就像是胡言乱语.关键是要确保在记事本中将编码设置为ANSI,(或者像我一样在linux上创建文件).
从我的回答:https://stackoverflow.com/a/11451916/406592
在我的服务器linux服务器上(在我的本地dev mac上不是这样),只要我不添加星号,就会忽略目录:
WWW /档案馆/*
我不知道为什么但它让我松了几个小时,所以我想分享......
还有一点要记住,如果.gitignore
似乎没有忽略未跟踪的文件,那么你不应该在与忽略相同的行上发表评论.所以这没关系
# ignore all foo.txt, foo.markdown, foo.dat, etc.
foo*
Run Code Online (Sandbox Code Playgroud)
但这不起作用:
foo* # ignore all foo.txt, foo.markdown, foo.dat, etc.
Run Code Online (Sandbox Code Playgroud)
.gitignore
将后一种情况解释为"忽略命名的文件"foo* # ignore all foo.txt, foo.markdown, foo.dat, etc."
,当然,你没有.
如果您需要停止跟踪大量被忽略的文件,可以组合一些命令:
git ls-files -i --exclude-standard | xargs -L1 git rm --cached
这将停止跟踪被忽略的文件.如果要从文件系统中实际删除文件,请不要使用该--cached
选项.您还可以指定限制搜索的文件夹,例如:
git ls-files -i --exclude-standard -- ${FOLDER} | xargs -L1 git rm
归档时间: |
|
查看次数: |
679755 次 |
最近记录: |