Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.gitignore未正确忽略文件_Git_Unix_Cmake_Gitignore - Fatal编程技术网

.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