2013-04-12 14 views
7

Załóżmy, że chcę użyć git add (lub innej dyrektywy wiersza poleceń - nie mogę użyć .gitignore), aby dodać wszystkie pliki Z WYJĄTKIEM dla pliku * .hi. Czy jest jakiś sposób na zrobienie tego? Do tej pory próbowałem:Czy istnieje składnia negacji dla pliku plików git add?

git add '!*.hi'

git add '!(*.hi)'

Jak rozumiem, jest to, w jaki sposób określić negację w składni glob, i to również, jak to zrobić w .gitignore. Jednak w przypadku obu tych poleceń pojawia się błąd fatal: [pattern] did not match any files. O ile warto, uruchamiam te polecenia z Windows Powershell.

Odpowiedz

5

Czysty Git sposób byłoby dodać je wszystkie, a następnie usunąć te pliki, których nie chcesz z indeksu jeszcze:

git add . 
git rm --cached *.hi 

The --cached jest wymagane, aby usunąć je tylko z indeksu; w przeciwnym razie usuwałbyś te pliki. Zauważ, że git rm zawsze "doda usunięcie" do indeksu, więc prawdopodobnie nie jest to, czego potrzebujesz, na wypadek, gdyby pliki były śledzone. Następnie należy użyć git reset jak sugeruje Klas Mellbourn w komentarzach:

git add . 
git reset -- *.hi 
+5

Zamiast tej ostatniej linii można również zrobić 'git resetowania head - * .hi' –

+0

@KlasMellbourn Dobry punkt! Jest to jedyny sposób, aby to zrobić, jeśli pliki '.hi' są już śledzone. – poke

2

W PowerShell to działa:

git add $(Get-ChildItem -Recurse -Exclude '*.hi') 
Powiązane problemy