.gitignore未正确忽略文件
我有一个项目,其结构如下:.gitignore未正确忽略文件,git,unix,cmake,gitignore,Git,Unix,Cmake,Gitignore,我有一个项目,其结构如下: build/ .git/ .gitignore LICENSE pics/ project.c README.md shared/ solutions/ 我的build/文件夹是我使用CMake的地方,因此有各种文件,如CMakeCache.txt,CMakeLists.txt等,我希望git忽略它们 我的.gitignore文件具有: .gitignore *.out *.swp /build/* 当我运行git status时,有modified:CMakeL
build/
.git/
.gitignore
LICENSE
pics/
project.c
README.md
shared/
solutions/
我的build/
文件夹是我使用CMake的地方,因此有各种文件,如CMakeCache.txt
,CMakeLists.txt
等,我希望git忽略它们
我的.gitignore
文件具有:
.gitignore
*.out
*.swp
/build/*
当我运行git status
时,有modified:CMakeLists.txt
我不明白。为什么不忽略CMakeLists.txt
?为什么它是唯一一个不被忽略的文件?因为git ls文件--error unmatch build/CMakeLists.txt
不会显示任何错误,这意味着build/CMakeLists.txt
文件已经在您的repo中被跟踪,所以git ignore
文件不再影响它。您需要运行git rm--cached build/CMakeLists.txt
将其从git中删除。作为git ls文件--error unmatch build/CMakeLists.txt
不会显示任何错误,这意味着build/CMakeLists.txt
文件已在您的repo中跟踪,因此.gitignore
文件不再影响它。您需要运行git rm--cached build/CMakeLists.txt
将其从git中删除。忽略规则(如.gitignore
中的规则)仅适用于未跟踪的文件。无法忽略对跟踪文件的更改。对于这个用例,有一些人们喜欢建议的机制,但它们都会带来比解决问题更多的麻烦
(而且我们知道有问题的文件是被跟踪的,因为git告诉您它被修改了。这意味着索引中已经有文件的版本。)
如果从索引中删除该文件,则可以应用忽略规则。这意味着从这个提交转发开始,repo不包含文件的任何版本。如果希望ignore成功覆盖整个build
目录,您可以说
git rm -r --cached build
当然,如果文件仍然存在于其他“当前”提交中(即在其他分支上),那么它仍然存在(并且可以通过合并的方式偷偷地回到当前分支中)
如果你不打算把文件放在那里,并且可以忍受历史重写,你可以考虑使用BFG回购清洁器来彻底清除它;但这是一个极端的解决方案,它将改变提交ID,并要求任何合作者替换其repo
另一方面,基本上没有理由将.gitignore
本身放在.gitignore
文件中。通常,您希望将忽略规则作为repo的一部分共享,但如果不希望,您可以使用.git/info/exclude
而不是.gitignore
基于路径的排除和基于扩展名的排除也不需要单独的条目,除非具有给定扩展名的文件存在于给定路径之外。忽略规则(如.gitignore
中的规则)仅适用于未跟踪的文件。无法忽略对跟踪文件的更改。对于这个用例,有一些人们喜欢建议的机制,但它们都会带来比解决问题更多的麻烦
(而且我们知道有问题的文件是被跟踪的,因为git告诉您它被修改了。这意味着索引中已经有文件的版本。)
如果从索引中删除该文件,则可以应用忽略规则。这意味着从这个提交转发开始,repo不包含文件的任何版本。如果希望ignore成功覆盖整个build
目录,您可以说
git rm -r --cached build
当然,如果文件仍然存在于其他“当前”提交中(即在其他分支上),那么它仍然存在(并且可以通过合并的方式偷偷地回到当前分支中)
如果你不打算把文件放在那里,并且可以忍受历史重写,你可以考虑使用BFG回购清洁器来彻底清除它;但这是一个极端的解决方案,它将改变提交ID,并要求任何合作者替换其repo
另一方面,基本上没有理由将.gitignore
本身放在.gitignore
文件中。通常,您希望将忽略规则作为repo的一部分共享,但如果不希望,您可以使用.git/info/exclude
而不是.gitignore
基于路径的排除和基于扩展名的排除也不需要单独的条目,除非具有给定扩展名的文件存在于给定路径之外。将目录添加到
。gitignore
:
echo 'node_modules/' >> .gitignore
echo 'config/constants.js' >> .gitignore
将文件添加到.gitignore
:
echo 'node_modules/' >> .gitignore
echo 'config/constants.js' >> .gitignore
然后:
或:
添加其他文件:
git add .
或:
承诺:
git commit -m ".gitignore is now working"
最后将代码推送到repo中。将目录添加到
.gitignore
:
echo 'node_modules/' >> .gitignore
echo 'config/constants.js' >> .gitignore
将文件添加到.gitignore
:
echo 'node_modules/' >> .gitignore
echo 'config/constants.js' >> .gitignore
然后:
或:
添加其他文件:
git add .
或:
承诺:
git commit -m ".gitignore is now working"
最后将您的代码推送到repo中。git ls文件的输出是什么--error unmatch build/CMakeLists.txt命令?输出是
build/CMakeLists.txt
可能与git ls文件的输出重复--error unmatch build/CMakeLists.txt命令?输出是build/CMakeLists.txt