强制git将点文件添加到存储库

强制git将点文件添加到存储库,git,file,hidden,Git,File,Hidden,如何在git repo中添加以点(隐藏文件)开头的文件?Git似乎总是忽略这些 键入git add.时,会添加git_DIR中的点文件,但不会从子目录中添加。另一方面,git add subdir/.dotfile将不起作用 我尝试了git add-f和put*在GIT\u DIR/.GIT/info/exclude中。没有运气。您可以通过路径名专门添加它们,例如 git add */.* 或 (最好小心使用-name,因为您不一定要用条目拾取每个目录。) 但是到目前为止,最简单的方法是使用g

如何在git repo中添加以点(隐藏文件)开头的文件?Git似乎总是忽略这些

键入
git add.
时,会添加
git_DIR
中的点文件,但不会从子目录中添加。另一方面,
git add subdir/.dotfile
将不起作用


我尝试了git add-f和put
*
GIT\u DIR/.GIT/info/exclude
中。没有运气。

您可以通过路径名专门添加它们,例如

git add */.*

(最好小心使用
-name
,因为您不一定要用
条目拾取每个目录。)


但是到目前为止,最简单的方法是使用
gitgui
。只需点击文件。

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文件--exclude standard-oi
中,那么它们将被忽略,“!*”是“unignore”它们的正确方法。但要有效,这种模式必须在正确的地方。忽略按以下顺序处理:

  • .gitignore,然后
  • 父目录(每个父目录,直到存储库根目录)的.gitignore,然后
  • $GIT\u DIR/info/exclude,然后
  • git config core.excludesfile报告的文件
    • $GIT_DIR/config
    • $HOME/.gitconfig,或
    • 系统配置文件(尝试
      GIT\u EDITOR=echo GIT config--system--edit
      获取其路径名)

当路径名与一个文件中的模式匹配时,不会参考后续文件。每个文件中的最后一场比赛“获胜”。$GIT\u DIR/info/exclude中的模式永远不能覆盖.gitignore文件中的模式。因此,如果文件被忽略(根据
git ls files--exclude standard-oi
),并且$git_DIR/info/exclude中的“!*”无效,那么检查所有适用的
.gitignore
文件以找出罪魁祸首。

有趣的是,在windows 10下,git版本为2.12.0。windows.1在“git Bash”和“git add.*”下运行也失败了。不会添加.classpath和.project等文件,因此以后不会提交。但是,这是提交错误报告的错误地方。

对以.gitignore开头的隐藏文件的限制可以在我使用的全局.gitignore中删除

find . -type f | grep -vP '^.\/.git' |  xargs git add

grep-vP'^.\/.git'
排除所有以
.git
开头的内容,并查找所有文件,包括所有隐藏的文件。

我不喜欢使用“查找”的想法,因为它可能会找到您告诉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

“touch.dotfile;git add.dotfile”是否在顶级目录中工作?这看起来有点像.gitignore文件(可能在子目录中)中列出的“*”,但是当我测试它时(无可否认是使用了一个相当新的git版本),我得到一个强烈的警告,建议使用-f标志来添加git。哪个GUI?我正在搜索显示这些文件的Git工具,并尝试了Giggle、Git-Cola和gitg,但它们没有显示.files,我看不到任何启用显示它们的选项…@在命令提示符下,键入“Git-gui”,预打包的gui应该执行(在Windows上)。@avgvstvs,谢谢,但如果我只使用Linux(最新的Ubuntu/Fedora)会怎么样@下载页面忘记说他们支持“git gui”和“gitk”。命令可能只是
git gitk
@Line,经过验证:
sudo apt get install gitk
,然后在一个带有
.git
文件夹的目录中,只需键入
gitk
,就得到了“git gui”对于Linux。你的答案帮助我。谢谢。有什么解决办法吗?我相信我没有使用通配符(*)就单独添加了它们。对不起,我目前无法访问windows计算机。我也有这个问题。在git Bash下运行的Windows 10 64+git-2.14.2-64只添加一些文件。名称以
字符开头的文件未添加。所以没有承诺。我没有在中找到错误报告
#!/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