2013-04-02 10 views
11

Czy istnieje sposób dodawania nowych plików i dodawania zmodyfikowanych plików za pomocą git? Oznacza to, że pliki wymienione jako nieśledzone ze statusem git.Git dodaj tylko wszystkie nowe pliki, niezmodyfikowane pliki

Inne niż oczywiście dodawanie każdego pliku osobno.

To nie jest absolutnie konieczne, aby zrobić to w moim przypadku, prawdziwe pytanie dla mnie jest tutaj odpowiedzi: How to make git-diff and git log ignore new and deleted files?

Oznacza to, że nie pokazują diff na nowe pliki, więc pytam, bo to bardziej nie mógł znaleźć nigdzie odpowiedzi.

+0

Co jest w przypadku użycia do tego? Ponieważ nie widzę, jak sensowne byłoby dodawanie plików, a nie dodawanie istotnych zmian w istniejących plikach, a jeśli zmiany nie są istotne, to zmiany, które zostaną zatwierdzone, prawdopodobnie muszą zostać wybrane ręcznie na podstawie innych kryteriów. –

+0

Mój workflow to sprawdzam każdy plik z różnicą, a następnie dodam go do "zrób to z drogi". Tak więc git diff pokazuje teraz tylko te pliki, które mam do sprawdzenia. Więc chcę dodać nowe pliki (zakładając lub wierząc, że są "ok"), aby usunąć je z drogi. –

Odpowiedz

12

Może

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

git ls-files pozwala wyświetlić listę plików zarządzanych przez git, przefiltrowane przez niektórych opcji. -o w tym przypadku filtrów to, aby pokazać tylko „inni (tj plików nieśledzone)”

Oświadczenie $(...) przekazuje wartości zwracanej tego polecenia jako argument git add.

+0

Musisz ponownie wykluczyć zignorowane pliki, inaczej 'git add' będzie narzekać. Na przykład. za pomocą flagi '--exclude-standard' do wywołania' git ls-files -o'. –

+0

OK, nie wiedziałem o tym. Dzięki! –

+0

Jeśli dobrze pamiętam, to * tylko * narzeka, mówiąc, że zignoruje te pliki, a jeśli naprawdę chcesz je dodać, będziesz musiał użyć flagi '--force'. Nadal denerwujące. –

2

Można użyć krótki tryb git status (patrz man git-status(1)), co daje następujący wynik:

Bez krótkim trybie:

$ git status 

... 


# Untracked files: 
# (use "git add <file>..." to include in what will be committed) 
# 
# README 
# application/libraries/Membres_exception.php 
no changes added to commit (use "git add" and/or "git commit -a") 

Z krótkim trybie:

$ git status -s 
M application/models/membre_model.php 
?? README 
?? application/libraries/Membres_exception.php 

Następnie używając grep, awk i xarg, możesz dodać pliki, w których pierwsza kolumna to ??.

$ git status -s | grep '??' | awk '{ print $2 }' | xargs git add 

i widzę, że to działało:

$ git status 
# On branch new 
# Changes to be committed: 
# (use "git reset HEAD <file>..." to unstage) 
# 
# new file: README 
# new file: application/libraries/Membres_exception.php 
+0

Dobry pomysł, chociaż jest problem: w przypadku gdy ścieżka pliku zawiera spacje 'awk '{print $ 2}'' pobierze tylko pierwszą część takiej ścieżki. –

+0

jak o tym: 'git status -s | grep "??" | awk '{print substr (0 $, indeks (0 $, 2 $))}' | xargs git add' –

Powiązane problemy