как заставить 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, заботиться...
