强制git将dotfiles添加到存储库

时间:2010-02-28 20:04:10

标签: git file hidden

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

当我输入git add .时,会添加GIT_DIR中的dotfiles,但不会添加来自子目录。另一方面,git add subdir/.dotfile将不起作用。

我尝试git add -f并将!.*放入GIT_DIR/.git/info/exclude。没有运气。

6 个答案:

答案 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中,那么它们就会被忽略,“!。*”就是“取消它们”的正确方法。但为了有效,这种模式必须在正确的位置。忽略按以下顺序处理:

    立即包含目录的
  • .gitignore ,然后
  • 父目录的
  • .gitignore (每个父级,直到存储库根目录),然后
  • $ GIT_DIR / info / exclude ,然后
  • git config core.excludesfile报告的文件(可以设置为
    • $ GIT_DIR /配置
    • $ 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罪魁祸首的文件。

答案 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中删除