Co prawdopodobnie zrobiłeś, aby to spowodować:
Takie rzeczy zdarzają się, gdy wybieracie mały program. Za chwilę zmienisz coś, co już działało, więc rzuciłeś zaklęcie ciągłego cofania poziomu 3:
machine1:~/proj1> git init
i zaczynasz dodawać / zatwierdzać. Ale potem projekt zaczyna się bardziej angażować i chcesz pracować na innym komputerze (takim jak domowy komputer stacjonarny lub laptop), więc robisz coś takiego
machine2:~> git clone ssh://machine1/~/proj1
i klonuje się i wszystko wygląda dobrze, więc pracujesz nad kodem z machine2.
Następnie ... próbujesz wypchnąć swoje zatwierdzenia z komputera2, i otrzymujesz komunikat ostrzegawczy w tytule.
Powodem tego komunikatu jest to, że repozytorium git, z którego ściągnąłeś, było przeznaczone do użycia tylko dla tego folderu na komputerze 1. Możesz go sklonować , ale pchanie może powodować problemy. „Właściwy” sposób zarządzania kodem w dwóch różnych lokalizacjach polega na „nagim” repozytorium, jak sugerowano. Nagie repozytorium nie jest zaprojektowane tak, aby można było w nim wykonać jakąkolwiek pracę , ma na celu koordynację zatwierdzeń z wielu źródeł. Dlatego najlepiej oceniana odpowiedź sugeruje usunięcie wszystkich plików / folderów innych niż folder .git po tobie git config --bool core.bare true
.
Wyjaśnienie najwyżej ocenianej odpowiedzi: wiele komentarzy do tej odpowiedzi mówi coś w stylu: „Nie usunąłem plików innych niż .git z komputera 1 i nadal byłem w stanie zatwierdzić z komputera 2”. Zgadza się. Jednak te inne pliki są teraz całkowicie „rozwiedzione” z repozytorium git. Idź git status
tam i powinieneś zobaczyć coś w rodzaju „fatal: Ta operacja musi być uruchomiona w drzewie roboczym”. Zatem propozycja usunięcia plików nie jest taka, aby zatwierdzenie z komputera2 działało ; jest tak, abyś nie pomylił się i nie pomyślał, że git nadal śledzi te pliki. Ale usunięcie plików jest problemem, jeśli nadal chcesz pracować na plikach na komputerze 1, prawda?
Co powinieneś naprawdę zrobić?
Zależy od tego, ile planujesz nadal pracować na komputerze 1 i komputerze 2 ...
Jeśli skończyłeś programować z komputera 1 i przeniosłeś cały program na komputer 2 ... po prostu zrób to, co sugeruje najwyżej oceniona odpowiedź: git config --bool core.bare true
a następnie, opcjonalnie, usuń wszystkie pliki / foldery inne niż .git z tego folderu, ponieważ są nieśledzone i mogą powodować zamieszanie.
Jeśli twoja praca na maszynie2 była tylko jednorazową sprawą i nie musisz kontynuować tam rozwoju ... nie zawracaj sobie głowy tworzeniem repozytorium; po prostu ftp / rsync / scp / etc. pliki z komputera * 2 * na wierzchu plików na komputerze * 1 *, zatwierdzaj / wypychaj z komputera * 1 *, a następnie usuń pliki z komputera * 2 *. Inni sugerowali utworzenie gałęzi, ale myślę, że to trochę bałagan, jeśli chcesz po prostu połączyć rozwój, który zrobiłeś jednorazowo z innej maszyny.
Jeśli chcesz kontynuować rozwój zarówno na komputerze 1, jak i na komputerze 2 ... musisz odpowiednio skonfigurować ustawienia. Musisz przekonwertować swoje repozytorium na zwykłe, a następnie musisz utworzyć klon tego na maszynie1, abyś mógł w nim pracować . Prawdopodobnie najszybszym sposobem na zrobienie tego jest zrobienie tego
machine1:~/proj1> git config --bool core.bare true
machine1:~/proj1> mv .git/ ../proj1.git
machine1:~/proj1> cd ..
machine1:~> rm -rf proj1
machine1:~> git clone proj1.git
machine1:~> cd proj1
Bardzo ważne: ponieważ zmieniłeś lokalizację repozytorium z proj1 na proj1.git, musisz to zaktualizować w pliku .git / config na komputerze machine2 . Następnie możesz zatwierdzić zmiany z komputera2. Na koniec staram się trzymać moje nagie repo w centralnej lokalizacji, z dala od drzew roboczych (tj. Nie umieszczam „proj1.git” w tym samym folderze nadrzędnym, co „proj1”). Radzę zrobić to samo, ale chciałem, aby powyższe kroki były jak najprostsze.