2017-12-30 35 views
0

Ich versuche Liste von einem Zweig verpflichtet, die im Anschluss an die Beratung in Making 'git log' ignore changes for certain paths nicht ein bestimmtes Verzeichnis berühren:ausschließen Syntax für git rev-Liste arbeitet falsch herum

git rev-list heads/demo ^master -- . ':(exclude)demo' 

(Beachten Sie, dass demo ist sowohl der Name der Branche und des Ordners auszuschließen.)

das Ergebnis enthält alle Commits, die andere Wege berühren und schließt nur diejenigen, die nur Touch-Dateien im Verzeichnis demo/. Was ich stattdessen sehen möchte, sind nur die Commits, die keine Datei im Verzeichnis demo/ berühren. Zur Klarstellung:

cc3ecaa define a task for creating the demo app 
M .gitignore 
M Gruntfile.js 
A demo/compile 
A tasks/demo.js 

zur Zeit aufgenommen, weil er Dateien außerhalb demo/ enthält, aber ich mag es ausgeschlossen werden, weil sie Dateien in demo/ enthält.

Antwort

0
awk ' !seen[$1]++ && NR!=FNR ' \ 
    <(git rev-list master..heads/demo -- demo/) \ 
    <(git rev-list master..heads/demo) 

oder

awk ' !NF{ printit=1 } !seen[$1]++ && printit' <<EOD 
$(git rev-list master..heads/demo -- demo/) 

$(git rev-list master..heads/demo) 
EOD 

oder

(git rev-list master..heads/demo -- demo/ 
    echo 
    git rev-list master..heads/demo) \ 
| awk '!NF { ++printit } seen[$1]++ && printit' 
+0

ich befürchtete, dass ich über awk gehen musste, aber es herauszufinden für mich mich mehrere Stunden gedauert hätte, so ein herzlicher Dank . – ccprog