3

我有一个包含.gitignore文件的 Git 存储库,其中列出了一些要忽略的文件(在构建期间创建)。

$ cat .gitignore
foo
$ ls
bar
$ git status
On branch master
nothing to commit, working directory clean
$ touch foo
$ ls
bar foo
$ git status
On branch master
nothing to commit, working directory clean
$

在该存储库的特定克隆中,我确实希望看到.gitignore.

这可以通过以下--ignored选项来完成git status

$ git status
On branch master
nothing to commit, working directory clean
$ git status --ignored
On branch master
Ignored files:
  (use "git add -f <file>..." to include in what will be committed)

    foo

nothing to commit, working directory clean
$

好的。我的问题是:我怎样才能使给定存储库的永久保存,这样我就不必记住添加--ignored标志?

$ git status
On branch master
Ignored files:
  (use "git add -f <file>..." to include in what will be committed)

    foo

nothing to commit, working directory clean
$

我确信有一些git config允许我配置我的克隆以忽略.gitignore...的内容

另外,我不想对所有存储库都有这个选项;仅适用于少数人。

4

3 回答 3

1

您需要做的是为命令创建一个别名(我们称之为istatus$ git status

$  git istatus
On branch master
Ignored files:
  (use "git add -f <file>..." to include in what will be committed)

    foo

nothing to commit, working directory clean

如何做到这一点在此处进行了描述,甚至在 SO 上也有类似的问题

TL;DR:基本上你只需要在 ~/.gitconfig 中添加行:

[alias]
    istatus = status --ignored
于 2014-09-18T10:05:31.600 回答
1

不可能(还)

Git(至少 v2.1 和更早版本)不允许您配置git status默认情况下也列出被忽略的文件。

不过,Git 允许您做的是git status通过选项修改未跟踪文件的行为status.showUntrackedFiles

也许未来版本的 Git 将具有“ status.showIgnoredFiles”选项......

所以,你可以做什么?

1 - 在本地定义别名

正如 Kleskowy 在他的回答中所建议的那样,显而易见且可能是最好的做法是在您的存储库中定义一个本地别名:

git config alias.istatus "status --ignored"

然后,运行git istatus而不是git status在有问题的存储库中也会列出被忽略的文件。

2 - 定义一个小包装器git

警告:以下方法适用于用户级别,而不是存储库级别。

或者,如果您不反对在 周围使用小包装器git,则可以定义以下内容,它会在运行--ignored时自动使用该标志git status

git() {
    if [[ ($1 == "status") ]]; then
        command git status --ignored "${@:2}";
    else
        command git "$@";
    fi;
}

将这些行放在您的.<shell>rc文件中并获取后者。

bash这是我的一个存储库中该包装器的测试结果(in ):

在此处输入图像描述

请注意,即使--ignored未明确使用该标志,也会列出被忽略的文件。

结论

除非有人能想到更好的方法,否则您所要求的本质上是对 Git 的功能请求;因此,我不确定您的问题是否在这里...

于 2014-09-18T11:31:56.490 回答
0

所提出的解决方案都没有达到我真正想要的效果。

然而,@Jubobs 对包装函数的建议最终让我知道了如何实际执行它。

大纲

  • 标记给定存储库以进行更改,最好使用git 方式。这可以使用git config和一些用户定义的变量来完成

  • --ignored为什么要停止向单个命令 ( )添加单个选项 ( status)?如果我们可以为每个 git 命令传递默认参数,那就太好了,

执行

所以我最终得到了以下小片段,在启动时获取:

git() {
  local GIT=$(which git)
  case "x$1" in
    x|xconfig)
      ${GIT} "$@"
    ;;
    *)
      ${GIT} $1 $(${GIT} config --get $1.options) "${@:2}"
    ;;
  esac
}

所以在我的特殊存储库中,我只是这样做:

$ git config --add status.options "--ignored"

之后,在这个 repo 中运行以下命令将显示我甚至被忽略的文件,而其他存储库将照常运行。

$ git status

讨论

  • 你可以通过创建一个名为${cmd}.options. 例如,如果您喜欢装饰您的git log输出,只需执行以下操作:

    $ git config log.options "--decorate"
    
  • config出于安全原因,该脚本排除了子命令。这应该可以防止在膝盖上射击自己,例如:

    $ git config add config.options --fuzz
    
  • 最后,它使用一些bashism(即${@:2})来允许包含空格的参数;如果您的外壳不是bash,请注意...

于 2014-09-24T16:28:58.957 回答