Удивлен таким количеством неправильных ответов. -u noнеправильно. -unoправильно. -u noпытается сделать статус файла с именем no! noЭто не аргумент для -u. Чтобы заставить noинтерпретировать как аргумент -u, не должно быть места. Чтобы проверить это, сделайте touch Invalidи сравните git status -uInvalidс git status -u Invalid.
Аарон МакДэйд
Ответы:
252
Как уже было сказано, для исключения из статуса просто используйте:
git status -uno # must be "-uno" , not "-u no"
Если вместо этого вы хотите навсегда игнорировать неотслеживаемые в данный момент файлы, вы можете из корня вашего проекта запустить:
Каждый последующий вызов git statusявно игнорирует эти файлы.
ОБНОВЛЕНИЕ : у приведенной выше команды есть небольшой недостаток: если у вас еще нет .gitignoreфайла, ваш gitignore проигнорирует себя! Это происходит потому, что файл .gitignoreсоздается до git status --porcelainвыполнения. Поэтому, если у вас еще нет .gitignoreфайла, я рекомендую использовать:
Это создает подоболочку , который завершает перед тем.gitignore файла.
ОБЪЯСНЕНИЕ КОМАНДЫ, так как я получаю много голосов (спасибо!) Думаю, мне лучше немного объяснить команду:
git status --porcelainиспользуется вместо того, git status --shortпотому что руководство указано: «Предоставляйте выходные данные в формате, удобном для синтаксического анализа для сценариев. Это похоже на краткие выходные данные, но будет оставаться стабильным во всех версиях git и независимо от конфигурации пользователя». Таким образом, у нас есть возможность синтаксического анализа и стабильность;
grep '^??'фильтрует только строки, начинающиеся с ??, которые, согласно руководству по git status , соответствуют неотслеживаемым файлам;
cut -c4- удаляет первые 3 символа каждой строки, что дает нам только относительный путь к неотслеживаемому файлу;
что |символы трубы , которые проходят вывод предыдущей команды на вход следующей команды;
>>и >символы переадресация операторы , которые добавляют вывод предыдущей команды в файл или переписывает / создает новый файл, соответственно.
ДРУГОЙ ВАРИАНТ для тех, кто предпочитает использоватьsed вместо grepи cut, вот еще один способ:
git status --porcelain | sed -n -e 's/^?? //p' >> .gitignore
cut -c4- удаляет первые 4 символа каждой строки, что дает нам только относительный путь к неотслеживаемому файлу; Номер -cобозначает начало списка номеров столбцов для вырезания. И 4-выбирает строку от столбца 4 до конца, которая обрезает столбцы 1-3. Таким образом, ваша команда вырезания фактически удаляет первые 3 символа каждой строки. Если вы удалите 4 символа из строки состояния git, например, для этого файла здесь:, ?? app/views/static_pages/contact.html.erbвы удалите первую букву app. Итак, команда верна, но объяснение неверно.
7stud
@ 7stud: спасибо, вы правы, я написал 4 по ошибке. Я исправил ответ.
Diego
2
Я очень ценю объяснение команды. Приятно знать, что делают случайные команды, которые я скопировал из Интернета, и помогает нам всем научиться лучше использовать командную строку и git.
Эрик Фиттинг,
1
-u noу меня не работает. Но -unoделает. Я обновил ответ соответственно. Это странный дизайн для git. Я нахожусь на git 1.7.1
Аарон МакДэйд
2
@AaronMcDaid: спасибо. Изменение документирована здесь , и обсуждается здесь
Диего
51
Если вы хотите навсегда игнорировать эти файлы, простой способ добавить их .gitignore:
Почему это не набирает столько голосов? Нет необходимости использовать 2 другие программы!
JoelFan
4
@JoelFan: две причины: 1) этот работает только из корня git , в то время как принятый работает из каждого подкаталога, вам просто нужно настроить .gitignoreпуть назначения 2) если у вас есть неотслеживаемый каталог, этот список каждый и каждый отдельный файл в нем, но не сам неотслеживаемый каталог (так что вы не будете игнорировать каталог и, таким образом, по-прежнему получать сообщения о будущих файлах в каталоге как неотслеживаемые, в то время как принятый перечисляет только каталог, а не неотслеживаемые файлы внутри . Это вопрос того, что вы хотите сделать, но часто вы просто хотите проигнорировать весь
Диего
1
Спасибо, Poolie. Я ценю разницу в вашем предложении из- за пунктов, упомянутых @Diego. Я начал работать с библиотекой файлов и папок, и я не хочу отслеживать / отправлять исходные файлы. Я хочу отслеживать только файлы, которые я добавляю или восстанавливаю в библиотеке. Добавление родительских папок игнорирует все. Это / ваше решение мгновенно добавило все 1696 файлов. xD
Chaos7703
Этого также можно добиться с помощью git config status.showUntrackedFiles no.
Параметр mode используется для указания обработки неотслеживаемых файлов. Это необязательно: по умолчанию используется все, и если он указан, он должен быть привязан к опции (например, -uno, но не -u no).
Что ж, если все будут RTFM перед публикацией, никто из нас никогда не получит никакой репутации :-)
Jenny D
4
Два пути:
используйте аргумент "-uno" для git-status. Вот пример:
[jenny@jenny_vmware:ft]$ git status
# On branch ft
# Untracked files:
# (use "git add <file>..." to include in what will be committed)
#
# foo
nothing added to commit but untracked files present (use "git add" to track)
[jenny@jenny_vmware:ft]$ git status -uno
# On branch ft
nothing to commit (working directory clean)
Или вы можете добавить файлы и директории в .gitignore, и в этом случае они никогда не появятся.
Удобный способ редактирования .gitignoreсущества git status | cat >> temp && vim temp. Затем отредактируйте файл так, чтобы первые несколько строк и последняя строка были удалены, а также конечные #и пробелы после них. Тогда cat temp >> .gitignore && rm temp. Если .gitignoreраньше не было, mv temp .gitignoreподойдет. Уродливая штука, но лучше, чем обновлять .gitignoreвручную.
sjas
1
Это неверный ответ. Правильный ответ -uno. Если вы используете -u no, это эквивалентно no -u- он будет делать статус для файла с именем no(который, вероятно, не существует) и использовать -uрежим по умолчанию . то есть это эквивалентgit status no
Аарон МакДэйд
3
-u noне показывает неустановленные файлы. -unoработает по желанию и показывает неустановленные, но не отслеживает.
Даже это не совсем правильно. git status -u Xэквивалентно git status X -u( Xне является аргументом -u). Это, в свою очередь, эквивалентно git status X(потому -uчто по умолчанию без аргумента -u). Следовательно, это просто git-статус в файле X. Так что , если Xэто noон просто пытается сделать статус GIT на файл с именем no, которое вы , вероятно , нет
Аарон МакДейд
2
Если вы не используете Unix-подобную ОС, это будет работать в Windows с использованием PowerShell.
Если у вас много неотслеживаемых файлов и вы не хотите " gitignore" их все, обратите внимание, что, начиная с git 1.8.3 (22 апреля 2013 г.) , git statusбудет упоминаться --untracked-files=noдаже если вы не добавляли эту опцию в первое место!
" git status" предлагает пользователям изучить --untracked=noвозможность использования этой опции, когда она занимает слишком много времени.
Я пришел сюда, чтобы решить немного другую проблему. Может быть, это будет кому-то полезно:
Создаю новую ветку feature-a. в рамках этой ветки я создаю новые каталоги, и мне нужно изменить .gitignore, чтобы подавить некоторые из них. Это часто случается при добавлении в проект новых инструментов, которые создают различные папки кэша. .serverless, .terraformи т. д.
Прежде чем я буду готов объединить это с мастером, у меня есть кое-что еще, поэтому я masterснова оформляю заказ , но теперьgit status оформляю поднимаю эти подавленные папки, поскольку .gitignore еще не был объединен.
Ответ здесь на самом деле прост, хотя мне пришлось найти этот блог, чтобы понять это:
Просто проверьте файл .gitignore из feature-aветки
*
, скорее всего, будет не то, что вы хотите.-u no
неправильно.-uno
правильно.-u no
пытается сделать статус файла с именемno
!no
Это не аргумент для-u
. Чтобы заставитьno
интерпретировать как аргумент-u
, не должно быть места. Чтобы проверить это, сделайтеtouch Invalid
и сравнитеgit status -uInvalid
сgit status -u Invalid
.Ответы:
Как уже было сказано, для исключения из статуса просто используйте:
Если вместо этого вы хотите навсегда игнорировать неотслеживаемые в данный момент файлы, вы можете из корня вашего проекта запустить:
Каждый последующий вызов
git status
явно игнорирует эти файлы.ОБНОВЛЕНИЕ : у приведенной выше команды есть небольшой недостаток: если у вас еще нет
.gitignore
файла, ваш gitignore проигнорирует себя! Это происходит потому, что файл.gitignore
создается доgit status --porcelain
выполнения. Поэтому, если у вас еще нет.gitignore
файла, я рекомендую использовать:Это создает подоболочку , который завершает перед тем
.gitignore
файла.ОБЪЯСНЕНИЕ КОМАНДЫ, так как я получаю много голосов (спасибо!) Думаю, мне лучше немного объяснить команду:
git status --porcelain
используется вместо того,git status --short
потому что руководство указано: «Предоставляйте выходные данные в формате, удобном для синтаксического анализа для сценариев. Это похоже на краткие выходные данные, но будет оставаться стабильным во всех версиях git и независимо от конфигурации пользователя». Таким образом, у нас есть возможность синтаксического анализа и стабильность;grep '^??'
фильтрует только строки, начинающиеся с??
, которые, согласно руководству по git status , соответствуют неотслеживаемым файлам;cut -c4-
удаляет первые 3 символа каждой строки, что дает нам только относительный путь к неотслеживаемому файлу;|
символы трубы , которые проходят вывод предыдущей команды на вход следующей команды;>>
и>
символы переадресация операторы , которые добавляют вывод предыдущей команды в файл или переписывает / создает новый файл, соответственно.ДРУГОЙ ВАРИАНТ для тех, кто предпочитает использовать
sed
вместоgrep
иcut
, вот еще один способ:источник
cut -c4-
удаляет первые 4 символа каждой строки, что дает нам только относительный путь к неотслеживаемому файлу; Номер-c
обозначает начало списка номеров столбцов для вырезания. И4-
выбирает строку от столбца 4 до конца, которая обрезает столбцы 1-3. Таким образом, ваша команда вырезания фактически удаляет первые 3 символа каждой строки. Если вы удалите 4 символа из строки состояния git, например, для этого файла здесь:,?? app/views/static_pages/contact.html.erb
вы удалите первую буквуapp
. Итак, команда верна, но объяснение неверно.-u no
у меня не работает. Но-uno
делает. Я обновил ответ соответственно. Это странный дизайн для git. Я нахожусь на git 1.7.1Если вы хотите навсегда игнорировать эти файлы, простой способ добавить их
.gitignore
:git ls-files --others --exclude-standard >> .gitignore
Это перечислит все файлы в неотслеживаемых каталогах, которые могут быть или не быть тем, что вы хотите.
источник
.gitignore
путь назначения 2) если у вас есть неотслеживаемый каталог, этот список каждый и каждый отдельный файл в нем, но не сам неотслеживаемый каталог (так что вы не будете игнорировать каталог и, таким образом, по-прежнему получать сообщения о будущих файлах в каталоге как неотслеживаемые, в то время как принятый перечисляет только каталог, а не неотслеживаемые файлы внутри . Это вопрос того, что вы хотите сделать, но часто вы просто хотите проигнорировать весьgit config status.showUntrackedFiles no
.Нашел в мануале
git status -uno
источник
Два пути:
используйте аргумент "-uno" для git-status. Вот пример:
Или вы можете добавить файлы и директории в .gitignore, и в этом случае они никогда не появятся.
источник
.gitignore
существаgit status | cat >> temp && vim temp
. Затем отредактируйте файл так, чтобы первые несколько строк и последняя строка были удалены, а также конечные#
и пробелы после них. Тогдаcat temp >> .gitignore && rm temp
. Если.gitignore
раньше не было,mv temp .gitignore
подойдет. Уродливая штука, но лучше, чем обновлять.gitignore
вручную.-uno
. Если вы используете-u no
, это эквивалентноno -u
- он будет делать статус для файла с именемno
(который, вероятно, не существует) и использовать-u
режим по умолчанию . то есть это эквивалентgit status no
-u no
не показывает неустановленные файлы.-uno
работает по желанию и показывает неустановленные, но не отслеживает.источник
git status -u X
эквивалентноgit status X -u
(X
не является аргументом-u
). Это, в свою очередь, эквивалентноgit status X
(потому-u
что по умолчанию без аргумента-u
). Следовательно, это просто git-статус в файлеX
. Так что , еслиX
этоno
он просто пытается сделать статус GIT на файл с именемno
, которое вы , вероятно , нетЕсли вы не используете Unix-подобную ОС, это будет работать в Windows с использованием PowerShell.
git status --porcelain | ?{ $_ -match "^\?\? " }| %{$_ -replace "^\?\? ",""} | Add-Content .\.gitignore
Однако
.gitignore
файл должен иметь новую пустую строку, иначе он добавит текст в последнюю строку независимо от того, есть ли в нем содержимое.Это может быть лучшей альтернативой:
$gi=gc .\.gitignore;$res=git status --porcelain|?{ $_ -match "^\?\? " }|%{ $_ -replace "^\?\? ", "" }; $res=$gi+$res; $res | Out-File .\.gitignore
источник
Если у вас много неотслеживаемых файлов и вы не хотите "
gitignore
" их все, обратите внимание, что, начиная с git 1.8.3 (22 апреля 2013 г.) ,git status
будет упоминаться--untracked-files=no
даже если вы не добавляли эту опцию в первое место!источник
Я пришел сюда, чтобы решить немного другую проблему. Может быть, это будет кому-то полезно:
Создаю новую ветку
feature-a
. в рамках этой ветки я создаю новые каталоги, и мне нужно изменить .gitignore, чтобы подавить некоторые из них. Это часто случается при добавлении в проект новых инструментов, которые создают различные папки кэша..serverless
,.terraform
и т. д.Прежде чем я буду готов объединить это с мастером, у меня есть кое-что еще, поэтому я
master
снова оформляю заказ , но теперьgit status
оформляю поднимаю эти подавленные папки, поскольку .gitignore еще не был объединен.Ответ здесь на самом деле прост, хотя мне пришлось найти этот блог, чтобы понять это:
Просто проверьте файл .gitignore из
feature-a
веткиисточник