--index-filter
Das Argument der Schale über eval
gegeben ist. Was dies in der Praxis bedeutet, dass wenn man zwei unterschiedliche Index Filter ausgeführt werden müssen, würden Sie sie buchstabieren wie:
git filter-branch <args> --index-filter 'cmd1; cmd2' <more-args>
Hinweis, dass dies ein Semikolon, kein Komma, und es geht innen die Anführungszeichen, die den Ausdruck zu einem einzigen Argument machen --index-filter
.
In Ihrem speziellen Fall jedoch können Ihre Index-Filter wahrscheinlich mit einem Befehl erfolgen. Der ein Befehl lautet:
git rm -r --cached --ignore-unmatch UserFiles testDir
Wenn -r
(rekursiv entfernen) verwenden, gibt es keine Notwendigkeit für die /*
, daher keine Notwendigkeit für die inneren Anführungszeichen. Natürlich muss der Befehl, der für den Indexfilter verwendet werden soll, wie immer als einzelnes Argument übergeben werden. Wenn er also Leerzeichen enthält - und wie wir sehen können -, müssen äußere Anführungszeichen sein . Daraus folgt:
git filter-branch -f \
--index-filter 'git rm -r --cached --ignore-unmatch testDir UserFiles' \
--prune-empty --tag-name-filter cat -- --all
(brach ich dies in drei Linien, die ersten beiden endend mit Backslash-Newline, für die Zwecke der Veröffentlichung Da Backslash-Newline die Shell weiter zu lesen bekommt, können sie auf diese Weise eingegeben werden, oder Sie. kann es ohne den Rückstrich alles wieder in eine große Linie drehen.)
Wenn Ihre Absicht nur Dateien innerhalb der UserFiles
und testDir
Verzeichnisse zu entfernen ist, und keine Unterverzeichnisse undzu entfernenihre Dateien, diese "wahrscheinlich" ist falsch. Das heißt:
git rm -r --cached testDir
wird entfernen testDir/a
, testDir/b/c
, testdir/b/d
, testdir/b
, testdir/c
und testdir
selbst, während:
git rm --cached "testDir/*"
entfernen wird nur testDir/a
und testDir/c
, so dass testDir/b/
intakt.Wenn Sie das tun müssen, können Sie die -r
Abkürzung nicht verwenden.
danke. Ich musste auch Unterverzeichnisse entfernen. Ich weiß nicht, warum meins funktioniert hat, aber alles (außer den unerwünschten Dirs) wird jetzt ohne die Warnung geschoben. Ich akzeptiere deine Antwort jedoch, weil es im Gegensatz zu mir "warum" erklärt. – Rakim