.gitignore 没有被递归应用
.gitignore not being recursively applied
最终目标:
让 git 递归地忽略 *.abc
类型的文件
问题:
Git
描述:
我的 gitignore
顶级文件中有以下行位于 /home/alma/project-origin/.gitignore
。
/**/*.abc
我发出以下命令并获得以下输出
cd /home/alma/project-origin/top-secret/subject
touch alma-wade.abc
git status .
On branch master
Untracked files:
(use "git add <file>..." to include in what will be committed)
alma-wade.abc
nothing added to commit but untracked files present (use "git add" to track)
为了解决问题,我在该文件夹中创建了一个 .gitignore
文件,然后 运行 再次创建它
cd /home/alma/project-origin/top-secret/subject
touch alma-wade.abc
echo "*.abc" >> .gitignore
git status .
On branch master
Untracked files:
(use "git add <file>..." to include in what will be committed)
modified: .gitignore
nothing added to commit but untracked files present (use "git add" to track)
我删除了 .git忽略本地文件 (rm /home/alma/project-origin/top-secret/subject/.gitignore
) 并开始解决问题
(A) 从缓存中移除
cd /home/alma/project-origin/top-secret/subject
git rm -r --cached .
git commit -m "..."
git push origin master
#Successful push
git add .
git status .
On branch master
Untracked files:
(use "git add <file>..." to include in what will be committed)
alma-wade.abc
nothing added to commit but untracked files present (use "git add" to track)
(B) 检查文件编码
file -bi /home/alma/project-origin/.gitignore
text/plain; charset=us-ascii
(C) 检查尾随空格
在vim中打开/home/alma/project-origin/.gitignore
并发出命令:set list
并进行目视检查
(D) 使用 git check-ignore -v
git check-ignore -v --no-index /home/alma/project-origin/top-secret/subject/alma-wade.abc
#no output
echo "*.abc" >> .gitignore
git check-ignore -v --no-index /home/alma/project-origin/top-secret/subject/alma-wade.abc
/home/alma/project-origin/top-secret/subject/.gitignore:1:*.abc /home/alma/project-origin/top-secret/subject/alma-wade.abc
rm .gitignore
(E) 使用 git 顶级目录中的 check-ignore -v
这是我最接近解决这个问题的一次
cd /home/alma/project-origin/
echo "/**/*.abc" >> .gitignore
cd /home/alma/project-origin/top-secret/subject/
git check-ignore -v --no-index /home/alma/project-origin/top-secret/subject/alma-wade.abc
#No output
cd /home/alma/project-origin/
git check-ignore -v --no-index /home/alma/project-origin/top-secret/subject/alma-wade.abc
/home/alma/project-origin.gitignore:1:/**/*.abc /home/alma/project-origin/top-secret/subject/alma-wade.abc
当我从顶级文件夹进行检查时应用顶级 .gitignore
规则,但当我在子文件夹中时不应用。我没办法。我唯一能想到的是这与文件系统(挂载的cifs)有关。有人可以帮忙吗
如果您想忽略所有以 .abc
结尾的文件,那么您只需要:*.abc
- **
对于匹配中包含子目录名称的匹配最有用。
有关 **
语法(和其他 glob)的一些示例,请参阅 https://www.atlassian.com/git/tutorials/gitignore。
例如:
$ git init test
$ cd test
$ mkdir -p 1/2
$ touch foo.txt 1/bar.txt 1/2/baz.txt
$ git status
On branch master
No commits yet
Untracked files:
(use "git add <file>..." to include in what will be committed)
1/
foo.txt
$ echo "*.txt" >.gitignore
$ git status
On branch master
No commits yet
Untracked files:
(use "git add <file>..." to include in what will be committed)
.gitignore
如果您嵌套了 Git 个存储库,"outer" 个存储库中的 .gitignore
不会影响 "inner" 个存储库:
mkdir outer && cd outer
git init
echo '/**/*.txt/' > .gitignore
touch foo.txt
git status
# Untracked file '.gitignore'
# No mention of 'foo.txt'
mkdir inner && cd inner
git init
touch foo.txt
git status
# Untracked file 'foo.txt'
因为你有一个你似乎不是故意创建的内部存储库,我建议删除它的 .git/
目录(在进行你认为合适的任何备份之后)。这将使该目录的内容受外部存储库的约束,.gitignore
现在应该生效。
您可能希望将内部目录中的文件提交到外部存储库。
最终目标:
让 git 递归地忽略 *.abc
问题: Git
描述:
我的 gitignore
顶级文件中有以下行位于 /home/alma/project-origin/.gitignore
。
/**/*.abc
我发出以下命令并获得以下输出
cd /home/alma/project-origin/top-secret/subject
touch alma-wade.abc
git status .
On branch master
Untracked files:
(use "git add <file>..." to include in what will be committed)
alma-wade.abc
nothing added to commit but untracked files present (use "git add" to track)
为了解决问题,我在该文件夹中创建了一个 .gitignore
文件,然后 运行 再次创建它
cd /home/alma/project-origin/top-secret/subject
touch alma-wade.abc
echo "*.abc" >> .gitignore
git status .
On branch master
Untracked files:
(use "git add <file>..." to include in what will be committed)
modified: .gitignore
nothing added to commit but untracked files present (use "git add" to track)
我删除了 .git忽略本地文件 (rm /home/alma/project-origin/top-secret/subject/.gitignore
) 并开始解决问题
(A) 从缓存中移除
cd /home/alma/project-origin/top-secret/subject
git rm -r --cached .
git commit -m "..."
git push origin master
#Successful push
git add .
git status .
On branch master
Untracked files:
(use "git add <file>..." to include in what will be committed)
alma-wade.abc
nothing added to commit but untracked files present (use "git add" to track)
(B) 检查文件编码
file -bi /home/alma/project-origin/.gitignore
text/plain; charset=us-ascii
(C) 检查尾随空格
在vim中打开/home/alma/project-origin/.gitignore
并发出命令:set list
并进行目视检查
(D) 使用 git check-ignore -v
git check-ignore -v --no-index /home/alma/project-origin/top-secret/subject/alma-wade.abc
#no output
echo "*.abc" >> .gitignore
git check-ignore -v --no-index /home/alma/project-origin/top-secret/subject/alma-wade.abc
/home/alma/project-origin/top-secret/subject/.gitignore:1:*.abc /home/alma/project-origin/top-secret/subject/alma-wade.abc
rm .gitignore
(E) 使用 git 顶级目录中的 check-ignore -v
这是我最接近解决这个问题的一次
cd /home/alma/project-origin/
echo "/**/*.abc" >> .gitignore
cd /home/alma/project-origin/top-secret/subject/
git check-ignore -v --no-index /home/alma/project-origin/top-secret/subject/alma-wade.abc
#No output
cd /home/alma/project-origin/
git check-ignore -v --no-index /home/alma/project-origin/top-secret/subject/alma-wade.abc
/home/alma/project-origin.gitignore:1:/**/*.abc /home/alma/project-origin/top-secret/subject/alma-wade.abc
当我从顶级文件夹进行检查时应用顶级 .gitignore
规则,但当我在子文件夹中时不应用。我没办法。我唯一能想到的是这与文件系统(挂载的cifs)有关。有人可以帮忙吗
如果您想忽略所有以 .abc
结尾的文件,那么您只需要:*.abc
- **
对于匹配中包含子目录名称的匹配最有用。
有关 **
语法(和其他 glob)的一些示例,请参阅 https://www.atlassian.com/git/tutorials/gitignore。
例如:
$ git init test
$ cd test
$ mkdir -p 1/2
$ touch foo.txt 1/bar.txt 1/2/baz.txt
$ git status
On branch master
No commits yet
Untracked files:
(use "git add <file>..." to include in what will be committed)
1/
foo.txt
$ echo "*.txt" >.gitignore
$ git status
On branch master
No commits yet
Untracked files:
(use "git add <file>..." to include in what will be committed)
.gitignore
如果您嵌套了 Git 个存储库,"outer" 个存储库中的 .gitignore
不会影响 "inner" 个存储库:
mkdir outer && cd outer
git init
echo '/**/*.txt/' > .gitignore
touch foo.txt
git status
# Untracked file '.gitignore'
# No mention of 'foo.txt'
mkdir inner && cd inner
git init
touch foo.txt
git status
# Untracked file 'foo.txt'
因为你有一个你似乎不是故意创建的内部存储库,我建议删除它的 .git/
目录(在进行你认为合适的任何备份之后)。这将使该目录的内容受外部存储库的约束,.gitignore
现在应该生效。
您可能希望将内部目录中的文件提交到外部存储库。