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