Wczoraj zadałem pytanie, jak sklonować repozytorium Git z jednego z moich komputerów na inny. Jak mogę „sklonować” z innego komputera? .
Teraz mogę pomyślnie sklonować repozytorium Git z mojego źródła (192.168.1.2) do mojego miejsca docelowego (192.168.1.1).
Ale kiedy dokonałem edycji pliku a git commit -a -m "test"
i a git push
, pojawia się ten błąd w miejscu docelowym (192.168.1.1):
git push
[email protected]'s password:
Counting objects: 21, done.
Compressing objects: 100% (11/11), done.
Writing objects: 100% (11/11), 1010 bytes, done.
Total 11 (delta 9), reused 0 (delta 0)
error: refusing to update checked out branch: refs/heads/master
error: By default, updating the current branch in a non-bare repository
error: is denied, because it will make the index and work tree inconsistent
error: with what you pushed, and will require 'git reset --hard' to match
error: the work tree to HEAD.
error:
error: You can set 'receive.denyCurrentBranch' configuration variable to
error: 'ignore' or 'warn' in the remote repository to allow pushing into
error: its current branch; however, this is not recommended unless you
error: arranged to update its work tree to match what you pushed in some
error: other way.
error:
error: To squelch this message and still keep the default behaviour, set
error: 'receive.denyCurrentBranch' configuration variable to 'refuse'.
To git+ssh://[email protected]/media/LINUXDATA/working
! [remote rejected] master -> master (branch is currently checked out)
error: failed to push some refs to 'git+ssh://[email protected]/media/LINUXDATA/working'
Używam dwóch różnych wersji Git (1.7 na pilocie i 1.5 na komputerze lokalnym). Czy to możliwy powód?
git config receive.denyCurrentBranch=updateInstead
: stackoverflow.com/a/28262104/6309Odpowiedzi:
Możesz po prostu przekonwertować swoje zdalne repozytorium na zwykłe repozytorium (w pustym repozytorium nie ma kopii roboczej - folder zawiera tylko rzeczywiste dane repozytorium).
Wykonaj następujące polecenie w folderze zdalnego repozytorium:
Następnie usuń wszystkie pliki oprócz
.git
tego folderu. A wtedy będziesz mógł wykonaćgit push
zdalne repozytorium bez żadnych błędów.źródło
git config --bool core.bare true
. Czy istnieje jakiś szczególny powód, dla którego niektóre pliki muszą zostać usunięte? Jeśli tak, czy możesz dokładniej określić, co należy usunąć?Właśnie miałem ten sam błąd, kiedy zacząłem uczyć się Git . Niektóre inne odpowiedzi najwyraźniej nie są dla kogoś nowego w Git!
(Zamierzam użyć nietechnicznych terminów, aby przekazać pomysł.) W każdym razie dzieje się tak, że masz dwa repozytoria, jeden to oryginał, który pierwszy stworzyłeś, a drugi to dzieło, które właśnie stworzyłeś.
W tej chwili jesteś w swoim repozytorium pracy i korzystasz z gałęzi „master”. Ale zdarza się, że jesteś „zalogowany” w swoim oryginalnym repozytorium do tej samej gałęzi „master”. Teraz, gdy jesteś „zalogowany” w oryginale, Git obawia się, że możesz zepsuć się, ponieważ możesz pracować nad oryginałem i popsuć wszystko. Musisz więc wrócić do oryginalnego repozytorium i zrobić „git checkout someotherbranch”, a teraz możesz bez problemu naciskać.
Mam nadzieję, że to pomoże.
źródło
git checkout -b tmp
. Następnie w źródle repo:git push
. Następnie z powrotem w celu (opcjonalnie):git checkout master; git branch -d tmp
Komunikat o błędzie opisuje, co się stało. Bardziej nowoczesne wersje Git odmawiają aktualizacji gałęzi za pomocą wypychania, jeśli gałąź ta jest wyewidencjonowana.
Najłatwiejszym sposobem pracy między dwoma nie nagimi repozytoriami jest albo
zawsze aktualizuj repozytoria poprzez ściągnięcie (lub pobranie i scalenie) lub, jeśli musisz,
wypychając do oddzielnej gałęzi (gałąź importu), a następnie łącząc tę gałąź z gałęzią główną na komputerze zdalnym.
Powodem tego ograniczenia jest to, że operacja wypychania działa tylko na zdalnym repozytorium Git, nie ma dostępu do indeksu i drzewa roboczego. Tak więc, jeśli jest to dozwolone, wypychanie wypisanej gałęzi zmieniłoby
HEAD
niezgodność z drzewem indeksu i drzewa roboczego w zdalnym repozytorium.Ułatwi to przypadkowe zatwierdzenie zmiany, która cofnie wszystkie wprowadzone zmiany, a także bardzo utrudni rozróżnienie między lokalnymi zmianami, które nie zostały zatwierdzone
HEAD
, a różnicami między nowym , indeksem i drzewem roboczym, które zostały spowodowane przez ruch pchającyHEAD
.źródło
git remote add box191 <191url>
), lub możesz przepchnąć z pola 191 do alternatywnie nazwanej gałęzi (np.git push origin master:refs/heads/upload
), A następnie do 192 pola i połączyć (npgit merge upload
.).git config receive.denyCurrentBranch=updateInstead
: stackoverflow.com/a/28262104/6309 : nie potrzebujesz już opcji 2.Podsumowanie
Nie można wypychać do tej sprawdzonej gałęzi repozytorium, ponieważ bałaganiłby użytkownika tego repozytorium w sposób, który najprawdopodobniej zakończy się utratą danych i historii . Ale możesz wypychać do dowolnej innej gałęzi tego samego repozytorium.
Ponieważ nagie repozytoria nigdy nie mają wypisanej żadnej gałęzi, zawsze możesz wypchnąć do dowolnej gałęzi nagiego repozytorium.
Istnieje wiele rozwiązań w zależności od potrzeb.
Rozwiązanie 1: Użyj nagiego repozytorium
Zgodnie z sugestią, jeśli na jednym komputerze nie potrzebujesz katalogu roboczego, możesz przejść do czystego repozytorium. Aby uniknąć bałaganu w repozytorium, możesz go po prostu sklonować:
Teraz możesz przesłać wszystko, co chcesz, na ten sam adres jak poprzednio.
Rozwiązanie 2: Przekaż do oddziału, który nie został wyewidencjonowany
Ale jeśli musisz sprawdzić kod na pilocie
<remote>
, możesz użyć specjalnej gałęzi do wypychania. Powiedzmy, że w lokalnym repozytorium zadzwoniłeś do swojego pilotaorigin
i jesteś na oddziale głównym. Więc możesz to zrobićNastępnie musisz scalić go, gdy jesteś w
origin
zdalnym repozytorium:Autopsja problemu
Kiedy gałąź jest wyewidencjonowana, zatwierdzanie doda nowe zatwierdzenie z nagłówkiem bieżącej gałęzi jako jej rodzicem i przesunie główkę gałęzi, aby była nowym zatwierdzeniem.
Więc
staje się
Ale gdyby ktoś mógł przepchnąć się do tej gałęzi między nimi, użytkownik znalazłby się w trybie, który git nazywa odłączonym trybem głowy :
Teraz użytkownik nie znajduje się już w gałęzi 1, bez wyraźnego poproszenia o sprawdzenie innej gałęzi. Co gorsza, użytkownik jest teraz poza jakimkolwiek oddziałem , a każde nowe zatwierdzenie będzie po prostu zwisać :
Hipotetycznie, jeśli w tym momencie użytkownik sprawdzi inny oddział, wówczas ten zwisający zatwierdzenie staje się uczciwą grą dla śmieciarza Gita .
źródło
HEAD
w repozytorium wypychanym do.HEAD
nadal będzie wskazywać na gałąź, a gałąź z kolei wskaże na wypchnięte nowe zatwierdzenie (zatwierdzenia); ale katalog roboczy i indeks / obszar pomostowy pozostaną niezmodyfikowane. Ktokolwiek pracuje nad repozytorium „push-to”, musi teraz ciężko pracować, aby odzyskać efekty wypychania: dowiedz się, czy są jakieś zmiany, które należy zapisać, a jeśli tak, starannie je zapisz.master
repozytoria na moim lokalnym komputerze. Dodałemremotes
plik do folderu serwera i próbuję wepchnąć moje repozytorium na serwer, aby inny użytkownik mógł go pobrać / pobrać, aby nad nim pracować. Pojawia się następujący błąd:! [remote rejected] master -> master (branch is currently checked out)
Jak mogę to sprawdzić?Można obejść to „ograniczenie”, edytując
.git/config
na serwerze docelowym. Dodaj następujące elementy, aby umożliwić wypychanie repozytorium git, nawet jeśli jest ono „wypisane”:lub
Pierwszy pozwoli na push, ostrzegając jednocześnie o możliwości zepsucia gałęzi, podczas gdy drugi po prostu pozwoli na to spokojnie.
Można tego użyć do „wdrożenia” kodu na serwerze, który nie jest przeznaczony do edycji. To nie jest najlepsze podejście, ale szybkie wdrożenie kodu.
źródło
cd .. && git reset --hard
Do wdrożenia używam powyższej metody z hakiem po otrzymaniu. Hackish, ale działa.git config receive.denyCurrentBranch warn
git config --local receive.denyCurrentBranch updateInstead
https://github.com/git/git/blob/v2.3.0/Documentation/config.txt#L2155
Użyj tego w repozytorium serwerów, a także zaktualizuje działające drzewo, jeśli nie nastąpi żadne nie śledzone nadpisanie.
Został on dodany w Git 2.3, jak wspomniał VonC w komentarzach.
Skompilowałem Git 2.3 i spróbowałem. Przykładowe użycie:
Wynik:
Tak,
b
zostałem popchnięty!źródło
--bare
myślę tradycyjny klon:--force
jest wymagany do pchania i sprawi, że „stracisz” zobowiązania na pilocie.Podoba mi się pomysł posiadania repozytorium nadającego się do użytku na zdalnym urządzeniu, ale zamiast fikcyjnej gałęzi, lubię używać:
To wydaje się być bardzo nową funkcją Gita - używam gita w wersji 1.7.7.4.
źródło
git checkout master
aby wrócić do gałęzi głównej. Dopiero wtedy zmiany zostaną zastosowane.Miałem ten sam problem. Dla mnie używam Git push do przenoszenia kodu na moje serwery. Nigdy nie zmieniam kodu po stronie serwera, więc jest to bezpieczne.
W repozytorium pchasz się, aby wpisać:
Umożliwi to zmianę repozytorium, gdy jest ono kopią roboczą.
Po uruchomieniu wypychania Git przejdź do komputera zdalnego i wpisz:
Spowoduje to, że wprowadzone zmiany zostaną odzwierciedlone w kopii roboczej zdalnego komputera.
Pamiętaj, że nie zawsze jest to bezpieczne, jeśli wprowadzisz zmiany w kopii roboczej, do której naciskasz.
źródło
denyCurrentBranch
i umieszczamgit checkout -f
whooks
folderze jak @ jack-senechal opublikowanym tutajMożesz odtworzyć repozytorium serwera i przekazać dane z lokalnego wzorca gałęzi do wzorca serwera.
Na zdalnym serwerze:
OK, z lokalnego oddziału:
źródło
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:
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
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
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.
źródło
W kilku krokach konfiguracji możesz łatwo wdrożyć zmiany w swojej witrynie przy użyciu jednego linku
Co jest miłe i proste, i nie musisz logować się do zdalnego serwera i robić nic takiego. Pamiętaj, że będzie to działać najlepiej, jeśli nie wykorzystasz kasy produkcyjnej jako działającej gałęzi! (OP działał w nieco innym kontekście i myślę, że rozwiązanie @Robert Gould dobrze to rozwiązało. To rozwiązanie jest bardziej odpowiednie do wdrożenia na zdalnym serwerze).
Najpierw musisz założyć puste repozytorium gdzieś na serwerze, poza twoim webrootem.
Następnie utwórz plik
hooks/post-receive
:I spraw, aby plik był wykonywalny:
Na twoim komputerze lokalnym
Wszystko gotowe! Teraz w przyszłości możesz użyć
git push production
do wdrożenia zmian!Kredyt za to rozwiązanie znajduje się na stronie http://sebduggan.com/blog/deploy-your-website-changes-using-git/ . Poszukaj bardziej szczegółowego wyjaśnienia tego, co się dzieje.
źródło
bare
, śledzę to i łączę się zhooks
(którą zasugerowałeś) i działałem idealnie.Powinieneś pchać tylko do samego repozytorium. Nagie repozytorium to repozytorium, które nie ma sprawdzonych gałęzi. Gdybyś miał przejść do katalogu nagiego repozytorium, zobaczyłbyś tylko zawartość katalogu .git.
źródło
Masz 3 opcje
Pociągnij i pchnij ponownie:
Wciśnij w inny oddział:
i scal je zdalnie (przez żądanie
git
lub pull-request )Wymuś to (niezalecane, chyba że celowo zmieniłeś zatwierdzanie przez
rebase
):Jeśli nadal odmawia, wyłącz
denyCurrentBranch
na zdalnym repozytorium:źródło
W rzeczywistości ustawienie pilota na niezrejestrowaną gałąź jest wystarczające. Po sprawdzeniu pilota w innej gałęzi możesz pchać.
źródło
Sprawdź swój
.git/config
projekt docelowy:Jeśli
core. bare
jest to fałsz, możesz ustawić na true:a następnie w lokalnym push do zdalnego:
zakończy się sukcesem, w remote_repo możesz sprawdzić wersję git.
a teraz nie możesz używać git w swoim „obszarze roboczym”:
powinieneś
bare.bare
powrócić do wartości false.źródło
Miałem ten sam problem przy użyciu Git do synchronizacji repozytoriów na moim telefonie z Androidem i laptopie. Rozwiązaniem było dla mnie pociągnięcie zamiast push, jak sugerował @CharlesBailey.
git push origin master
w repozytorium Androida nie powiodło się z tymi samymi komunikatami o błędach, które otrzymał @ hap497 z powodu wypychania do niezarejestrowanego pobrania repozytorium + kopia robocza.git pull droid master
w repozytorium laptopa i kopii roboczej działa dla mnie. Oczywiście musisz wcześniej uruchomić coś takiegogit remote add droid /media/KINGSTON4GB/notes_repo/
.źródło
Starsze wersje Git pozwalały na wypychanie do aktualnie wyewidencjonowanego oddziału niepublicznego repozytorium.
Okazuje się, że było to strasznie mylące. Dodali więc ostrzeżenie, które widzisz, co jest również bardzo mylące.
Jeśli pierwsze repozytorium działa tylko jako serwer, przekonwertuj je na zwykłe repozytorium, zgodnie z zaleceniami innych odpowiedzi i gotowe.
Jeśli jednak potrzebujesz współdzielonej gałęzi między dwoma repozytoriami, które są w użyciu, możesz to osiągnąć przy pomocy następującej konfiguracji
Repo1 - będzie działać jako serwer, a także będzie wykorzystywany do programowania
Repo2 - będzie tylko dla rozwoju
Skonfiguruj Repo1 w następujący sposób
Utwórz oddział, aby udostępnić pracę.
Aby być bezpiecznym, powinieneś również utworzyć $ (REPO) .git / hooks / update, który odrzuca wszelkie zmiany w czymkolwiek innym niż shared_branch, ponieważ nie chcesz, żeby ludzie mulili się z twoimi prywatnymi oddziałami.
Teraz utwórz lokalny oddział w repo1, w którym wykonasz swoją rzeczywistą pracę.
(może wymagać
git config --global push.default upstream
, abygit push
do pracy)Teraz możesz utworzyć repo2 za pomocą
W tym momencie masz zarówno konfigurację repo1, jak i repo2, aby działać na lokalnych oddziałach, które wypychają i wyciągają z
shared_branch
repo1, bez potrzeby martwienia się o ten komunikat o błędzie lub zsynchronizowania katalogu roboczego w repo1. Niezależnie od tego, jakiego normalnego przepływu pracy używasz, powinno działać.źródło
OK, jeśli chcesz normalne zdalne repozytorium, utwórz dodatkową gałąź i sprawdź ją. Wciśnij go do jednej gałęzi (która nie jest wyewidencjonowana) i połącz ją z tą, która jest obecnie aktywna później po wypchnięciu z lokalnie.
Na przykład na zdalnym serwerze:
W konfiguracji lokalnej:
Na zdalnym serwerze:
źródło
Oto jeden test, który możesz zrobić, aby zobaczyć, jak
bare
działają rzeczy związane z serwerem:Wyobraź sobie, że masz na nim stację roboczą i serwer z działającą witryną i chcesz od czasu do czasu aktualizować tę witrynę (dotyczy to również sytuacji, w której dwóch programistów przesyła swoje prace tam iz powrotem przez gołego pośrednika).
Inicjalizacja
Utwórz katalog na komputerze lokalnym i
cd
do niego, a następnie wykonaj następujące polecenia:server
katalog (zwróć uwagę na .git na końcu). Ten katalog będzie służył jako kontener tylko dla plików repozytorium.content
katalogu. To jest twój katalog na żywo / produkcyjny, który będzie obsługiwany przez oprogramowanie twojego serwera.Przepływ pracy
Oto podstawowy przepływ pracy:
Wejdź do
local
katalogu, utwórz niektóre pliki i zatwierdź je. Wreszcie wypchnij je na serwer:Teraz przejdź do
content
katalogu i zaktualizuj zawartość serwera:Powtórz 1-2. Tutaj
content
może być inny programista, który może również pchać na serwer, alocal
ty możesz go wyciągnąć.źródło
Wykorzystanie tego do przekazania go do zdalnego oddziału upstream rozwiązało dla mnie ten problem:
Pilot nie miał dostępu do repozytorium nadrzędnego, więc był to dobry sposób na uzyskanie najnowszych zmian w tym pilocie
źródło
git push <remote> master:newbranch
. Chodzi o to, że wypychasz nową gałąź do pilota, który można następnie scalić. W ten sposób unikniesz problemów z niespójnością wymienionych w komunikacie o błędzie.Musiałem ponownie uruchomić
git --init
w istniejącym nagim repozytorium, a to utworzyło.git
katalog wewnątrz drzewa nagich repozytoriów - zdałem sobie sprawę, że po wpisaniugit status
. Usunąłem to i znowu wszystko było w porządku :)(Wszystkie te odpowiedzi są świetne, ale w moim przypadku było to coś zupełnie innego (o ile widzę), jak opisano.)
źródło
Jestem pewien, że większość osób przeglądających to pytanie zatrzyma się na pierwszych dwóch ogromnych odpowiedziach, ale nadal chciałbym zaoferować moje rozwiązanie.
Miałem konfigurację projektu internetowego Eclipse + EGit, gdy napotkałem opisany błąd. Pomogło mi po prostu użycie aplikacji GitHub, która w magiczny sposób rozwiązała problem. Podczas gdy EGit zawsze odmawiał pushowania, aplikacja komputerowa GitHub tylko wzruszyła ramionami i naciskała moje zmiany. Może w bardziej elegancki sposób radzi sobie z sytuacją wielokrotnego logowania.
źródło
Artykuł, który znalazłem, który może być przydatny dla innych, to Git za 5 minut .
Miałem projekt Xcode pod kontrolą wersji Git, który chciałem przekazać do wirtualnego rozproszonego Ethernetu (VDE), który mam w DC. VDE działa w Centos 5.
Żaden z artykułów, które czytałem o Git, nie mówił o czystych repozytoriach. Wszystko brzmiało tak prosto, dopóki nie spróbowałem, jak sądzę, łatwości pochodzącej z tła SVN .
Sugestie, aby zdalne repozytorium nie działało. Jeszcze lepiej dla moich wymagań było sklonowanie projektu Xcode
projectname.git
, skopiowanie go na zdalny serwer; następnie popycha magicznie działa. Następnym krokiem będzie nakłonienie Xcode do przesyłania bez błędów dotyczących zatwierdzeń, ale na razie nie mam nic przeciwko robieniu tego z Terminalu.Więc:
Aby przesłać zmiany z projektu Xcode po zatwierdzeniu w Xcode:
Jestem pewien, że istnieje gładszy, bardziej wyrafinowany sposób na wykonanie powyższych czynności, ale przynajmniej to działa. Aby wszystko było jasne, oto kilka wyjaśnień:
/xcode-project-directory
to katalog, w którym znajduje się twój projekt xcode. Prawdopodobnie jest/Users/Your_Name/Documents/Project_Name
. nazwa projektu to dosłownie nazwa projektu, ale można go nazwać dowolną nazwą. Git nie dba o to.Aby korzystać z SCP, musisz mieć konto użytkownika na zdalnym serwerze, który ma dostęp do SSH . Każdy, kto ma własny serwer, będzie miał taką możliwość. Jeśli korzystasz z hostingu współdzielonego lub podobnego, możesz nie mieć szczęścia.
remotehost.com
to nazwa twojego zdalnego hosta. Możesz równie łatwo użyć jego adresu IP. Dla większej przejrzystości używam Gitosis na zdalnym hoście z kluczami SSH, więc nie popycham hasła, kiedy go wypycham . Artykuł Hosting Git Reposiaries, Easy (and Secure) Way mówi o tym, jak to wszystko skonfigurować.źródło
Najlepszym sposobem na to jest:
Sklonuje to repozytorium, ale nie wykona żadnych kopii roboczych
.../remote
. Jeśli spojrzysz na pilota, zobaczysz utworzony jeden katalog o nazwiecurrentrepo.git
, który prawdopodobnie jest tym, czego chcesz.Następnie z lokalnego repozytorium Git:
Po wprowadzeniu zmian możesz:
źródło
Właśnie natrafiłem na ten problem z repozytorium git wdrażania na Heroku .
Nie wiem, po co Heroku ma po swojej stronie repozytorium, ale jako obejście tego problemu mogłem zresetować zdalne repozytorium i ponownie je załadować.
Nie powinieneś używać kopii swojego repozytorium Heroku jako jedynego repozytorium git do współpracy, ale na wszelki wypadek powiem jasno: nie rób tego, chyba że masz pewność, że masz pełną kopię swojego repozytorium bezpiecznie przechowywaną w innym miejscu niż Heroku. Wykonanie resetu spowoduje usunięcie zawartości repozytorium.
Zresetować:
Zainstaluj wtyczkę heroku-repo, jeśli jeszcze tego nie zrobiłeś.
Wykonaj reset, który usuwa repozytorium i tworzy nowe, puste
Wciśnij do pilota Heroku, jak zwykle; wszystko ponownie załaduje.
źródło
heroku plugins:install https://github.com/heroku/heroku-repo.git
Powiedzmy, że trzeba będzie zmienić plik konfiguracyjny na serwerze zdalnym po utworzeniu pustego (pustego) repozytorium
tam zobaczysz
Przekształcisz to w fałsz w prawdę, a ja usunąłem logallrefupdates = true (nie jestem pewien, czy zostanie użyty!)
do
Możesz przetestować następujące
Ta gałąź HEAD: (nieznana) zostanie wyświetlona, jeśli nie możesz PUSH. Więc jeśli gałąź HEAD jest nieznana, powinieneś zmienić go na true, a po udanym wypychaniu możesz ponownie użyć
i zobaczysz
źródło
Dla mnie działającym rozwiązaniem jest:
NA PILOCIE:
NA LOKALU:
NA PILOCIE:
Ale to nie jest prawdziwe rozwiązanie, to tylko obejście.
źródło
Na wypadek, gdyby ktoś uznał to za przydatne. Dla mnie był to problem z uprawnieniami serwera git. Sprawdziłem projekt od samego początku i wcisnąłem prosty plik, a następnie otrzymałem komunikat „Push push: Push to origin / master was został odrzucony”
źródło
Dzięki Git dwa zwykłe repozytoria (inne niż zwykłe) nie mogą bezpośrednio pchać / wyciągać plików tam i z powrotem. Musi istnieć pośrednie repozytorium nagie. Najwyraźniej to trochę jak małżeństwo, które ma dziecko, a para się rozwiedli. Rodzice nie będą ze sobą rozmawiać, ale będą komunikować się przez dziecko.
Masz więc jedno repozytorium, klonujesz je do nagiego repozytorium, a następnie klonujesz do trzeciego. Pierwszy i trzeci mogą wymieniać informacje za pośrednictwem drugiego repozytorium, samego. Wydaje mi się, że ma to sens, ponieważ nie chciałbyś, aby ktoś mógł sprawdzać rzeczy w twoim repozytorium bez twojej zgody, ponieważ mogłoby to powodować konflikty scalania i tym podobne.
Oto przykład:
Na PC, w ~ / workspace
Na laptopie w ~ / workspace (nie uruchamiaj git init itp.)
// Następnie wykonaj różne zatwierdzenia i popchnij je:
Następnie z powrotem na PC, w ~ / workspace
// Następnie wykonaj różne zatwierdzenia i popchnij je:
Na laptopie git pull
i tak dalej..
Oto absolutnie konkretny przykład na jednym komputerze, skopiowany bezpośrednio z okna poleceń, abyśmy wiedzieli, że nie pominięto żadnych kroków, że naprawdę działało itp.:
źródło
Moje rozwiązanie (w użyciu)
bingo
źródło