Добавление только неотслеживаемых файлов - PullRequest
138 голосов
/ 16 сентября 2011

Одна из команд, которые я нахожу невероятно полезной в Git, - это git add -u, чтобы выбросить в индекс все, кроме неотслеживаемых файлов. Есть ли обратное этому? В последние несколько месяцев я часто оказывался в положении, когда я в интерактивном режиме добавлял некоторые обновления в индекс, и я хочу добавить все неотслеживаемые файлы в этот индекс перед тем, как зафиксировать.

Есть ли способ добавить только неотслеживаемые файлы в индекс без индивидуальной идентификации? Я не вижу ничего очевидного в справочных документах, но, может быть, мне не хватает этого?

Спасибо.

Ответы [ 11 ]

204 голосов
/ 16 сентября 2011

Это просто с git add -i. Наберите a (для «добавления без отслеживания»), затем * (для «всех»), затем q (для выхода) и все готово.

Чтобы сделать это с помощью одной команды: echo -e "a\n*\nq\n"|git add -i

30 голосов
/ 16 сентября 2011

git ls-files -o --exclude-standard дает неотслеживаемые файлы, поэтому вы можете сделать что-то вроде ниже (или добавить к нему псевдоним):

git add $(git ls-files -o --exclude-standard)
11 голосов
/ 04 декабря 2013

Не совсем то, что вы ищете, но я нашел это весьма полезным:

git add -AN

Добавит все файлы в указатель, но без их содержимого. Файлы, которые не были отслежены, теперь ведут себя так, как если бы они были отслежены. Их содержимое будет отображаться в git diff, и вы можете добавить его в интерактивном режиме с помощью git add -p.

10 голосов
/ 17 ноября 2012

Вы можете добавить это в ваш файл ~ / .gitconfig:

[alias]
    add-untracked = !"git status --porcelain | awk '/\\?\\?/{ print $2 }' | xargs git add"

Затем из командной строки просто запустите:

git add-untracked
9 голосов
/ 11 августа 2015

Люди предложили передать по выводу от git ls-files до git add, но это не получится в тех случаях, когда есть имена файлов, содержащие пробелы или символы глобуса, такие как *.

Безопасный способ будет использовать:

git ls-files -o --exclude-standard -z | xargs -0 git add

, где -z указывает git использовать \0 терминаторы строки, а -0 сообщает xargs то же самое. Единственным недостатком этого подхода является то, что параметр -0 является нестандартным, поэтому его поддерживают только некоторые версии xargs.

5 голосов
/ 24 апреля 2014

git ls-files перечисляет файлы в текущем каталоге. Если вы хотите перечислить неотслеживаемые файлы из любого места дерева, это может работать лучше:

git ls-files -o --exclude-standard $(git rev-parse --show-toplevel)

Чтобы добавить все неотслеживаемые файлы в дереве:

git ls-files -o --exclude-standard $(git rev-parse --show-toplevel) | xargs git add
4 голосов
/ 05 ноября 2017

Я попробовал это, и это сработало:

git stash && git add . && git stash pop

git stash только помещает все измененные отслеживаемые файлы в отдельный стек, а оставшиеся файлы остаются неотслеживаемыми. Затем, выполнив команду git add ., вы создадите все неотслеживаемые файлы, как требуется. В конце концов, чтобы вернуть все измененные файлы из стека, выполнив git stash pop

0 голосов
/ 10 июля 2019

git add -u (неотслеживаемые файлы)

git add. (добавить все файлы в этом каталоге)

git add -all (добавить все файлы во все каталоги)

0 голосов
/ 10 мая 2019

Здесь много хороших советов, но внутри Powershell я не смог заставить его работать.

Я являюсь разработчиком .NET, и мы в основном все еще используем ОС Windows, так как мы не использовали ядро ​​.Net и кроссплатформенность так много, поэтому мое повседневное использование Git происходит в среде Windows, гдеОболочка используется чаще Powershell, а не Git Bash.

Для создания псевдонимной функции для добавления неотслеживаемых файлов в репозиторий Git можно выполнить следующую процедуру.

Внутри файла $ profile в Powershell (в случае его отсутствия - вы можете запустить:New-Item $ Profile)

notepad $ Profile

Теперь добавьте метод Powershell:

function AddUntracked-Git() {
 &git ls-files -o --exclude-standard | select | foreach { git add $_ }
}

Сохраните файл $ profile и перезагрузите его в Powershell.Затем перезагрузите файл профиля $ с помощью:.$ profile

Это похоже на команду источника в среде * nix IMHO.

Так что в следующий раз, если вы разработчик, использующий Powershell в Windows против Git Repo и хотите просто включить неотслеживаемые файлы, вы можете запустить:

AddUntracked-Git

Это следуетсоглашение о Powershell, где у вас есть существительные глагола.

0 голосов
/ 21 октября 2016

Если у вас есть тысячи неотслеживаемых файлов (тьфу, не спрашивайте), тогда git add -i не будет работать при добавлении *.Вы получите сообщение об ошибке Argument list too long.

. Если вы также используете Windows (не спрашивайте # 2 :-) и вам нужно использовать PowerShell для добавления всех неотслеживаемых файлов, вы можете использовать эту команду:

git ls-files -o --exclude-standard | select | foreach { git add $_ }
...