Korzystam z Git w systemie Windows (msysgit), aby śledzić zmiany w niektórych pracach projektowych.
Dzisiaj pracowałem na innym komputerze (ze zdalnym repozytorium brian
) i teraz próbuję scalić zmiany dokonane dzisiaj z powrotem w mojej zwykłej lokalnej wersji na moim laptopie.
Na laptopie git pull brian master
ściągałem zmiany do mojej lokalnej wersji. Wszystko było w porządku oprócz głównego dokumentu InDesign - to pokazuje konflikt.
Wersja na PC ( brian
) to najnowsza wersja , którą chcę zachować, ale nie wiem, jakie polecenia każą repozytorium użyć tej wersji.
Próbowałem bezpośrednio skopiować plik na mój laptop, ale wydaje się, że to przerywa cały proces scalania.
Czy ktoś może skierować mnie we właściwym kierunku?
źródło
git checkout --ours
? Strona podręcznika sugeruje (IMHO), że kasa --ours / - ich usunie zmianę z listy „oba zmodyfikowane, wymagają scalenia” i doda ją do indeksu, i myślę, że to nie jest poprawne. Wierzę, że będziesz musiał biecgit add
po kasie.git merge branch_name
.).--their
i--ours
są zamieniane, tj. --Their == aktualnie wyewidencjonowana gałąź, a --ours to gałąź, zwykle gałąź zdalna lub specyfikacja ścieżki, którą próbujesz scalić z bieżącą Oddział. W[space]--[space]
disambiguates do ścieżki specyfikacji pomiędzy nazwą oddziału i ścieżkę ciemno, że zarówno zdarzyć istnieć o tej samej nazwie opcji (np istniejąca nazwa oddziału jest „abc” i katalog istnieje nazywany „abc”).Musisz ręcznie rozwiązać konflikt (kopiowanie pliku), a następnie zatwierdzić plik (bez względu na to, czy skopiowałeś go, czy używałeś wersji lokalnej) w ten sposób
Git zwykle automatycznie zatwierdza po scaleniu, ale gdy wykryje konflikty, których nie może rozwiązać samodzielnie, stosuje wszystkie wymyślone łaty, a resztę pozostawia do rozwiązania i ręcznego zatwierdzenia. Strona Git Merge , kurs Crash Git-SVN lub ten wpis na blogu mogą rzucić nieco światła na to, jak to powinno działać.
Edycja: Zobacz post poniżej, tak naprawdę nie musisz samodzielnie kopiować plików, ale możesz z nich korzystać
wybierz żądaną wersję pliku. Kopiowanie / edycja pliku będzie konieczne tylko wtedy, gdy chcesz mieszać obie wersje.
Proszę zaznaczyć odpowiedź mipadi jako prawidłową.
źródło
Możesz również przezwyciężyć ten problem
co powoduje
git
utworzenie lokalnych kopii skonfliktowanego pliku binarnego i odrodzenie na nim domyślnego edytora:{conflicted}.HEAD
{conflicted}
{conflicted}.REMOTE
Oczywiście nie można pożytecznie edytować plików binarnych w edytorze tekstu. Zamiast tego skopiuj nowy
{conflicted}.REMOTE
plik{conflicted}
bez zamykania edytora. Następnie po zamknięciu edytorgit
zobaczy, że nieokreślona kopia robocza została zmieniona, a konflikt scalania został rozwiązany w zwykły sposób.źródło
Hit return to start merge resolution tool
”), a git pozostawi dodatkowe pliki na swoim miejscu. Następnie możesz je zmodyfikować lub połączyć w zewnętrzne narzędzie (przydatne w formatach dokumentów binarnych, takich jak LibreOffice / OpenOffice / MSWord) i zapisać wynik z powrotem do oryginalnej nazwy pliku. Aby poinformować gita, że konflikt został rozwiązany,git add
oryginalna nazwa pliku, a następnie możesz zakończyć zatwierdzanie scalania.Aby rozwiązać problem, utrzymując wersję w bieżącym oddziale (zignoruj wersję z gałęzi, w której się scalasz), po prostu dodaj i zatwierdź plik:
Aby rozwiązać problem, zastępując wersję w bieżącej gałęzi wersją z gałęzi, w której się scalasz, musisz najpierw pobrać tę wersję do katalogu roboczego, a następnie dodać / zatwierdzić:
Wyjaśnione bardziej szczegółowo
źródło
Odpowiedź mipadi nie do końca działała, musiałem to zrobić:
lub, aby zachować scalanie wersji:
następnie
A potem mogłem ponownie zrobić „git scaletool” i przejść do następnego konfliktu.
źródło
Z
git checkout
dokumentówźródło
Zetknąłem się z podobnym problemem (chciałem pobrać zatwierdzenie, które zawierało niektóre pliki binarne, które powodowało konflikty po scaleniu), ale natknąłem się na inne rozwiązanie, które można wykonać w całości za pomocą git (tj. Bez konieczności ręcznego kopiowania plików). Pomyślałem, że dołączę to tutaj, więc przynajmniej pamiętam, kiedy następnym razem będę go potrzebować. :) Kroki wyglądają tak:
Pobiera najnowsze zatwierdzenia z zdalnego repozytorium (w zależności od konfiguracji może być konieczne określenie nazwy oddziału), ale nie próbuje się połączyć. Zapisuje zatwierdzenie w FETCH_HEAD
Spowoduje to pobranie kopii plików binarnych, które chcę, i zastąpienie zawartości drzewa roboczego wersją pobraną ze zdalnej gałęzi. git nie próbuje scalać, więc kończy się dokładna kopia pliku binarnego ze zdalnej gałęzi. Gdy to zrobisz, możesz dodać / zatwierdzić nową kopię tak jak zwykle.
źródło
Ta procedura ma na celu rozwiązanie konfliktów plików binarnych po przesłaniu żądania ściągnięcia do Github:
W Github na żądanie ściągnięcia konflikt powinien zniknąć.
źródło
Jeśli plik binarny to coś więcej niż dll lub coś, co można edytować bezpośrednio jak obraz, lub plik mieszany (i nie musisz wyrzucać / wybierać jednego lub drugiego pliku), prawdziwe scalenie wyglądałoby tak:
Proponuję poszukać narzędzia różnicującego zorientowanego na plik binarny, na przykład istnieją pewne darmowe na przykład dla plików graficznych
i porównaj je.
Jeśli nie ma narzędzia do porównywania plików, to jeśli masz oryginalny generator pliku bin (to znaczy, istnieje dla niego edytor ... jak blender 3d, możesz następnie ręcznie sprawdzić te pliki, również przejrzyj dzienniki i zapytaj drugą osobę, co powinieneś dołączyć) i zrób pliki wyjściowe za pomocą https://git-scm.com/book/es/v2/Git-Tools-Advanced-Merging#_manual_remerge
$ git show :1:hello.blend > hello.common.blend $ git show :2:hello.blend > hello.ours.blend $ git show :3:hello.blend > hello.theirs.blend
źródło
Natknąłem się na dwie strategie zarządzania różnicowaniem / scalaniem plików binarnych za pomocą Git w systemie Windows.
Tortoise git pozwala skonfigurować narzędzia porównywania / scalania dla różnych typów plików na podstawie ich rozszerzeń. Zobacz 2.35.4.3. Zaawansowane ustawienia Diff / Merge http://tortoisegit.org/docs/tortoisegit/tgit-dug-settings.html . Ta strategia oczywiście polega na dostępności odpowiednich narzędzi porównywania / scalania.
Korzystając z atrybutów git, możesz określić narzędzie / komendę do konwersji pliku binarnego na tekst, a następnie pozwolić na to domyślne narzędzie do porównywania / scalania. Widzieć http://git-scm.com/book/it/v2/Customizing-Git-Git-Attributes . W artykule podano nawet przykład wykorzystania metadanych do różnicowania obrazów.
Mam obie strategie do pracy z plikami binarnymi modeli oprogramowania, ale poszliśmy z Tortoise Git, ponieważ konfiguracja była łatwa.
źródło
Korzystam z Git Workflow dla programu Excel - https://www.xltrail.com/blog/git-workflow-for-excel , aby rozwiązać większość problemów związanych z scalaniem plików binarnych. Ta aplikacja typu open source pomaga mi wydajnie rozwiązywać problemy bez poświęcania zbyt wiele czasu i pozwala mi bez problemu wybrać odpowiednią wersję pliku.
źródło
moja sprawa wydaje się być błędem .... używając git 2.21.0
Zrobiłem pull ... narzekałem na pliki binarne:
A potem nic w żadnej z odpowiedzi tutaj nie skutkowało jakimkolwiek wyjściem, który miałby sens.
Jeśli spojrzę na plik, który mam teraz ... to ten, który edytowałem. Jeśli to zrobię:
Otrzymuję wynik:
i wciąż mam swoją wersję pliku. Jeśli mam rm, a następnie kasę, zamiast tego powie 1, ale nadal daje mi moją wersję pliku.
git Fibletool mówi
i mówi status git
Jedną z opcji jest cofnięcie zatwierdzenia ... ale miałem pecha i miałem wiele zmian, a ten zły był pierwszy. Nie chcę tracić czasu na powtarzanie tego.
aby rozwiązać to szaleństwo:
Właśnie pobiegłem
która traci wersję zdalną i prawdopodobnie marnuje miejsce na przechowywanie dodatkowego pliku binarnego ... wtedy
co zwraca mi wersję zdalną
następnie ponownie edytowałem plik ... a następnie zatwierdzaj i wypychaj, co prawdopodobnie oznacza marnowanie miejsca na inną kopię pliku binarnego.
źródło
git checkout --ours <path>
otrzymaniaUpdated 0 paths from the index
. Naprawiłem to za pomocągit add <path>
polecenia, które robi to samo.