Unison ignoriert Pfade nicht

Unison ignoriert Pfade nicht

Ich versuche, .gitdie Verzeichnisse .bundleund node_modulevon meiner Synchronisierung zu ignorieren. Ich habe jede Menge verschiedene Kombinationen ausprobiert, um es zum Laufen zu bringen, aber bei jeder Synchronisierung kann ich sehen, wie alle diese Verzeichnisse mit dem Remotecomputer synchronisiert werden.

Kann jemand erkennen, was ich falsch mache?

~/.unison/default.prf

# Roots of the synchronization
root = /Users/bob/synced
root = ssh://bob@remotebox/synced

# Paths to synchronize
path = hack/testdir

# Some regexps specifying names and paths to ignore
ignore = Name *.log
ignore = Name .DStore
ignore = Name .DS_Store
ignore = Name *.output
ignore = Name *:*
ignore = Path {*/.git/*}
ignore = Path {*/.bundle/*}
ignore = Path {*/.vagrant/*}
ignore = Path {*/.git}
ignore = Path {*/.bundle}
ignore = Path {*/node_modules}

# Window height
height = 37

# propogate file modification times
times = true

# Log actions to the terminal
log = true

auto = true
batch = true

Dies ist die Synchronisierung von OSX zu Windows 10, falls das hilft.

Antwort1

Hier ist ein Link zumPfadangaben und Ignorieren von PfadenAbschnitt des Unison-Handbuchs, weil es mein Lieblingsabschnitt ist, wenn ich Fragen zu Unison beantworte. Beachten Sie, dass ignore Name = namejeder Pfad ignoriert wird, in dem die letzte Komponente übereinstimmt name. Außerdem

[Das Zeichen] *entspricht jeder Zeichenfolge außer /(und beginnt nicht mit ., wenn es am Anfang eines Namens verwendet wird).

Wir können also Pfade genauso ignorieren, wie wir bestimmte Dateitypen ignorieren. Unter Berücksichtigung der Tatsache, dass Ihre .git, .bundleund node_modulealle ein führendes /Zeichen haben, aber in einem versteckten Verzeichnis zu finden sein können, das mit einem beginnt ., sind die folgenden Zeilen das, was Sie brauchen:

ignore = Name {*/,.*/}.git
ignore = Name {*/,.*/}.bundle
ignore = Name {*/,.*/}node_module

Für alle, die nur das gesamte rootVerzeichnis synchronisieren, gibt es einen unglücklichen Sonderfall, der hier nicht behandelt wird: Wenn sich diese Dateien auf der obersten Ebene befinden, direkt in dem rootVerzeichnis, das Sie synchronisieren, gibt es in diesem Fall kein führendes /Zeichen. Dieses Problem wird im obigen Profil vermieden, da nur das Verzeichnis testdirmit der Zeile synchronisiert wird path = hack/testdir. Wie auch immer, für jemanden, der das gesamte Stammverzeichnis synchronisiert, könnten Sie .*,*den Globbing-Mustern etwas wie hinzufügen, aber diese Muster werden übereinstimmenbeliebigDatei mit einem Namen wie too. Sie können also entweder festlegen, dass in der obersten Ebene Ihres Verzeichnisses foo.gitkeine Verzeichnisse/Dateien mit dem Namen usw. vorhanden sind , oder, wenn Sie mit der Zuordnung von Dingen wie too einverstanden sind , können Sie die folgenden Zeilen verwenden:.gitrootfoo.git

ignore = Name {.*,*,*/,.*/}.git
ignore = Name {.*,*,*/,.*/}.bundle
ignore = Name {.*,*,*/,.*/}node_module

verwandte Informationen