как заставить git игнорировать игнорирует in.гитюдного


У меня есть репозиторий Git, содержащий файл .gitignore, в котором перечислены несколько файлов (которые создаются во время сборки), которые следует игнорировать.

$ 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...

Кроме того, я не хочу иметь эту опцию для всех репозиториев; только для избранных.

3 3

3 ответа:

Что вам нужно сделать, так это создать псевдоним (назовем его 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

Невозможно (пока)

Git (по крайней мере, v2. 1 и старше) не позволяет настроить git status также список игнорируемых файлов по умолчанию.

Однако Git позволяет вам изменить поведение git status в отношении неотслеживаемого файла с помощью status.showUntrackedFiles вариант.

Возможно, в будущей версии Git появится опция "status.showIgnoredFiles"...

Так, что вы можете сделать?

1 - Определите псевдоним локально

Очевидное и вероятное лучше всего было бы, как предложил Клескоуи в своем ответе , определить псевдоним, локальный для вашего репозитория:

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) этой оболочки в одном из моих репозиториев:

Введите описание изображения здесь

Обратите внимание, что игнорируемые файлы также попадают в список, даже если флаг --ignored не используется явно.

Заключение

Если кто-то не может придумать лучший подход, то вы спрашиваете: по сути, это запрос функции для Git; поэтому я не уверен, что ваш вопрос имеет здесь свое место...

Ни одно из предложенных решений не дало того, чего я действительно хотел.

Тем не менее, предложение @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"

После этого выполнение следующей команды в этом репозитории покажет мне даже игнорируемые файлы, в то время как другие репозитории будут вести себя как обычно.

$ git status

Обсуждение

  • Вы можете добавить ваши личные параметры для любой команды git , создав конфигурационный параметр с именем ${cmd}.options. например, если вы предпочитаете украсить свой git log вывод, просто сделайте:

    $ git config log.options "--decorate"
    
  • Скрипт исключает подкоманду config из соображений безопасности. это должно предотвратить попадание себе в колено чем-то вроде:

    $ git config add config.options --fuzz
    
  • Наконец, он использует некоторые башизмы (а именно ${@:2}), чтобы разрешить аргументы, содержащие пробелы; если ваша оболочка не bash, заботиться...