如何在git repo中添加以dot(隐藏文件)开头的文件? Git似乎总是忽略这些。
当我输入git add .
时,会添加GIT_DIR
中的dotfiles,但不会添加来自子目录。另一方面,git add subdir/.dotfile
将不起作用。
我尝试git add -f
并将!.*
放入GIT_DIR/.git/info/exclude
。没有运气。
答案 0 :(得分:28)
git add .
和git add dir/.dot
对我来说很合适,我现在已经很方便地使用了简单的1.6.6.1和1.7.0版本的Git。
% git --version
git version 1.6.6.1
% git ls-files -o
.baz/baz
.foo
bar/.bar
quuux/quuux
quux
% git add .
% git ls-files -o
% git ls-files
.baz/baz
.foo
bar/.bar
quuux/quuux
quux
你使用的是什么版本的Git?您的子目录实际上是子模块(它们是独立管理的)吗?
默认情况下不排除“点文件”,但是系统,存储库或工作树上的某些配置可能会以这种方式设置它们。如果它们出现在git ls-files --exclude-standard -oi
中,那么它们就会被忽略,“!。*”就是“取消它们”的正确方法。但为了有效,这种模式必须在正确的位置。忽略按以下顺序处理:
git config core.excludesfile
报告的文件(可以设置为
GIT_EDITOR=echo git config --system --edit
获取其路径名))。当路径名与一个文件中的模式匹配时,不会查询后续文件。每个文件中的最后一个匹配“获胜”。 $ GIT_DIR / info / exclude 中的模式永远不能覆盖 .gitignore 文件中的模式。因此,如果文件被忽略(按git ls-files --exclude-standard -oi
)并且 $ GIT_DIR / info / exclude 中的“!。*”无效,请检查所有适用的.gitignore
罪魁祸首的文件。
答案 1 :(得分:14)
您可以通过路径名特别添加它们,例如,
git add */.*
或
find . -name '.[a-z]*' -exec git add '{}' ';'
(谨慎对待-name
,因为您不一定要使用.
条目来获取每个目录。)
但到目前为止最简单的方法是使用git gui
。只需点击文件即可。
答案 2 :(得分:1)
有趣的是在windows 10下使用git版本2.12.0.windows.1运行在" Git-Bash" " git add。*"也失败了。像.classpath和.project等文件没有添加,因此后来没有提交。但是,提交错误报告是错误的。
答案 3 :(得分:0)
我用
find . -type f | grep -vP '^.\/.git' | xargs git add
grep -vP '^.\/.git'
排除以 .git
开头的所有内容并查找所有文件,包括所有隐藏文件。
答案 4 :(得分:0)
我不喜欢使用“查找”的想法,因为它可能会找到您告诉 git 忽略的内容。您可以使用 bash 脚本。此脚本只会“添加”已修改的文件,而不是未跟踪的:
#!/bin/bash
addFile=false
theseLines=($(git status))
for thisLine in "${theseLines[@]}" ; do
if [[ "${addFile}" == 'true' ]] ; then
git add $thisLine
addFile=false
fi
if [[ "${thisLine}" == 'modified:' ]] ; then
addFile=true
#echo 'the next line will be a file that should be added'
fi
done
答案 5 :(得分:-1)
以。开头的隐藏文件的限制可以在全局.gitignore中删除