2014-04-17 18 views
10

Próbuję dodać niestandardową strategię scalania podobny do tego w tej kwestii: Git merge conflict to always take the newest filegit: Jak dodać niestandardową strategię scalania?

Uratowałem skrypt jako git-merge-latest.sh i dodaje następujące linie do .git/config:

[merge "latest"] 
    name = select latest file merge driver 
    driver = git-merge-latest.sh %O %A %B 

jednak gdy uruchamiam git pull --strategy latest, otrzymuję komunikat:

Could not find merge strategy 'latest'. 
Available strategies are: octopus ours recursive resolve subtree. 

próbowałam sprawdzanie git config merge.latest.driver, która zwraca oczekiwany wynik. Zmieniłem także wartość driver na true, aby sprawdzić, czy nie było problemu ze znalezieniem skryptu.

Zdarza się to w dwóch różnych systemach z git 1.8.2.2 i 1.7.9.5. Co ja robię źle?

Odpowiedz

18

W tym przypadku nie konfigurowanie strategię scalania, skonfigurowano sterownik scalania:

Strategia Merge to program, który określa, jak dwa (lub więcej) zobowiązuje są scalane . Domyślnie git merge używa strategii "rekurencyjnej", znalezionej w programie git-merge-recursive. Podając flagę --strategy <strategy> do git-merge (lub git-pull), mówisz jej, aby wywołała inną strategię. Jeśli chcesz podłączyć własną strategię scalania, możesz, tworząc plik wykonywalny git-merge-mystrategy na swojej ścieżce i uruchamiając git merge --strategy mystrategy.

To różni się od sterownika scalającego . Sterownik scalania to mechanizm używany do rozwiązywania konfliktu w pliku istniejącym podczas łączenia dwóch zatwierdzeń. Podłączasz własny sterownik scalania w opisany sposób, konfigurując ustawienie merge.mydriver.driver.

Aby włączyć sterownik scalania dla konkretnego pliku, trzeba skonfigurować sterownik dla tego pliku w .gitattributes:

filename merge=mydriver 
+0

chcieć jednoznacznie stwierdzić, że dodanie strategię scalania jest sprawą modyfikacji 'git 'code - nie jest to coś, co można zrobić poprzez zmiany konfiguracji (przynajmniej obecnie) ... – twalberg

+1

@twalberg - możesz całkiem łatwo podłączyć własną wtyczkę; jeśli masz 'git-merge-xyz' na swojej ścieżce, git uruchomi go, jeśli' git merge --strategy xyz'. W mojej odpowiedzi uczynię to bardziej zrozumiałym. –

+2

Czy specyfikacja zapisywania pliku wykonywalnego strategii git merge jest udokumentowana w dowolnym miejscu? Czego powinienem oczekiwać na stdin i jaki powinien być wynik? –

Powiązane problemy