如何强制 git 将点文件添加到存储库
Posted
技术标签:
【中文标题】如何强制 git 将点文件添加到存储库【英文标题】:How to force git to add dotfiles to repository 【发布时间】:2011-01-22 02:05:28 【问题描述】:Git 似乎总是忽略这些。
当我输入git add .
时,会添加GIT_DIR
中的点文件,但不会从子目录中添加。另一方面,git add subdir/.dotfile
将不起作用。
我尝试了git add -f
并将!.*
放入GIT_DIR/.git/info/exclude
。
【问题讨论】:
“touch .dotfile; git add .dotfile”是否在***目录中工作?这看起来有点像 '.*' 列在 .gitignore 文件中(可能在子目录中),但是当我测试它时(诚然使用相当新版本的 git),我收到一个严重的警告,建议使用 -f标记到 git add。 【参考方案1】: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_DIR/config,
$HOME/.gitconfig,或
系统配置文件(尝试GIT_EDITOR=echo git config --system --edit
获取其路径名)。
当路径名与一个文件中的模式匹配时,不会查询后续文件。每个文件中的最后一场比赛“获胜”。 $GIT_DIR/info/exclude 中的模式永远不能覆盖 .gitignore 文件中的模式。因此,如果文件被忽略(根据git ls-files --exclude-standard -oi
)并且如果 $GIT_DIR/info/exclude 中的“!.*”无效,则检查所有适用的.gitignore
文件以找出罪魁祸首.
【讨论】:
你的回答对我有帮助。谢谢【参考方案2】:您可以通过路径名专门添加它们,例如,
git add */.*
或
find . -name '.[a-z]*' -exec git add '' ';'
(注意-name
是很好的,因为您不一定要选择每个目录及其.
条目。)
但到目前为止,最简单的方法是使用git gui
。只需点击文件。
【讨论】:
哪个图形用户界面?我正在搜索显示这些文件的 Git 工具,并尝试了 Giggle、Git Cola 和 gitg,但它们没有显示 .files,而且我没有看到任何启用显示它们的选项... @Line 在命令提示符下,输入“git gui”,预打包的 gui 应该执行(在 Windows 上) @avgvstvs,谢谢,但是如果我只使用 Linux(最新的 Ubuntu/Fedora)呢? :) @Line,下载页面忘了说他们支持“git gui”和“gitk”。该命令可能只是git gitk
@Line, 已验证:sudo apt-get install gitk
然后在带有.git
文件夹的目录中,只需输入gitk
,您就有了适用于Linux 的“git-gui”。【参考方案3】:
有趣的是,在 Windows 10 下,git 版本 2.12.0.windows.1 在“Git-Bash”下运行,“git add .*”也失败了。 .classpath 和 .project 等文件未添加,因此稍后未提交。但是,这是提交错误报告的错误地方。
【讨论】:
解决方法是什么? 我相信我是在不使用通配符 (*) 的情况下单独添加它们的。抱歉,目前无法访问 Windows 机器。 我也有这个问题。在 Git-Bashgit add *
下运行的 Windows 10 64 + git-2.14.2-64 仅添加了一些文件。未添加名称以 .
字符开头的文件。所以没有承诺。我在github.com/git-for-windows/git/issues 中没有找到错误报告【参考方案4】:
我用
find . -type f | grep -vP '^.\/.git' | xargs git add
grep -vP '^.\/.git'
排除以.git
开头的所有内容,并找到包含所有隐藏文件的所有文件。
【讨论】:
【参考方案5】:我不喜欢使用“查找”的想法,因为它可能会找到您告诉 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
【讨论】:
【参考方案6】:如果您只需要添加几个 .dotfiles,我建议使用 -f
标志,因为简单的 git add .yourDotFile
在 git 版本 2.28.8 上不起作用,并且您不想搞砸与全球.gitignore
。因此使用git add .yourDotFile -f
【讨论】:
【参考方案7】:对以 . 开头的隐藏文件的限制可以在全局 .gitignore 中删除
【讨论】:
以上是关于如何强制 git 将点文件添加到存储库的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 Visual Studio 将文件夹添加到已复制到本地 git 存储库的 git 源代码控制?