Добавление только неотслеживаемых файлов


168

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

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

Спасибо.


1
Что касается «выбросить все, кроме неотслеживаемых файлов в индекс», .gitignoreспециально разработано для этой цели, а не git add -u.
Pacerier

Кроме того, вы просите добавить неотслеживаемые файлы при удалении всех отслеживаемых в настоящее время, или вы просите добавить неотслеживаемые файлы поверх отслеживаемых в настоящее время (чтобы все отслеживалось)?
Pacerier

Ответы:


237

С этим легко git add -i. Введите a(для «добавить без отслеживания»), затем *(для «всех»), затем q(для выхода) и все готово.

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


4
Я надеялся, что было что-то менее, ну, в общем, интерактивное, но это, конечно, лучше, чем файл за файлом. :-)
Роб Уилкерсон

34
echo -e "a\n*\nq\n"|git add -i
Мат

@ Спасибо, полная команда ----> git add -ia * q ??
BKSpurgeon

Argument list too long... так близко!
Симеон

1
Для меня с git 2.21.0 это было git add -iтогда 4добавить неотслеживаемым, тогда *для всех потом qвыйти
Harry B

36

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

git add $(git ls-files -o --exclude-standard)

1
alias gau = "git ls-files -o --exclude-standard | xargs -i git add '{}'" работает для меня
Стефан,

git ls-files --help - довольно полезное чтение: -o, --others Show other (i.e. untracked) files in the output
Джошуа Кунцманн

15

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

git add -AN

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


Это именно то, что я искал - позволяет git commit -pпросматривать и новые файлы.
nitsujri

11

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

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

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

git add-untracked

Мне нравится этот подход, но он не обрабатывает пробелы в именах файлов.
Пол Кокколи

9

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

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

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

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


6

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

6

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

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

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


0

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

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

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

Более сжатая версия:git ls-files -o --exclude-standard | % { git add $_ }
marckassay

0

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

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

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

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

Блокнот $ Профиль

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

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

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

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

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

AddUntracked-Гит

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


0

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

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

git add -N может быть полезен для перечисления, какие из них будут позже ...


git add -uдобавит измененные файлы не неотслеживаемые
Тарасович

-3

Чтобы добавить все неотслеживаемые файлы, команда git

git add -A

Также, если вы хотите получить более подробную информацию о различных доступных опциях, вы можете ввести команду

git add -i

вместо первой команды вы получите больше опций, включая опцию добавления всех неотслеживаемых файлов, как показано ниже:

$ git add -i предупреждение: LF будет заменен на CRLF в README.txt. Файл будет иметь исходные окончания строк в вашем рабочем каталоге. предупреждение: LF будет заменен CRLF в package.json.

* Команды * 1: статус 2: обновление 3: возврат 4: добавление без отслеживания 5: исправление 6: изменение 7: выход 8: помощь Что теперь> a

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.