Czy możesz wyjaśnić, co jest nie tak z tym przepływem pracy?
$ git init --bare bare
Initialized empty Git repository in /work/fun/git_experiments/bare/
$ git clone bare alice
Cloning into alice...
done.
warning: You appear to have cloned an empty repository.
$ cd alice/
$ touch a
$ git add a
$ git commit -m "Added a"
[master (root-commit) 70d52d4] Added a
0 files changed, 0 insertions(+), 0 deletions(-)
create mode 100644 a
$ git push
No refs in common and none specified; doing nothing.
Perhaps you should specify a branch such as 'master'.
fatal: The remote end hung up unexpectedly
error: failed to push some refs to '/work/fun/git_experiments/bare'
Nie git push
zawsze wypycha do repozytorium, z którego sklonowałem?
Odpowiedzi:
Tak, problem polega na tym, że nie ma żadnych zatwierdzeń w „goły”. Jest to problem tylko z pierwszym zatwierdzeniem, jeśli tworzysz repo w kolejności (goły, alicja). Spróbuj zrobić:
Byłoby to wymagane tylko za pierwszym razem. Potem powinno działać normalnie.
Jak zauważył Chris Johnsen, nie miałbyś tego problemu, gdyby Twój push.default został dostosowany. Lubię upstream / tracking.
źródło
sudo apt-get upgrade git-core
isudo apt-get upgrade git
wydaje mi się, że żadna aktualizacja nie jest konieczna.git --version
zwraca 1.7.3.1. Masz pojęcie, czego brakuje? Przyznaję, że obecnieapt-get update
nie działa dla mnie, ale nie tak dawno temu.matching
; możepush.default
ustawiłeśupstream
/tracking
(lubcurrent
) w swoim~/.gitconfig
?git push origin master:master
wyrazić to jasno. Jeśli to nie zadziała, sprawdź, na jakiej gałęzi jesteś:git branch
być może nie dokonałeś pierwszego zatwierdzenia lub dokonałeś tego w gałęzi innej niż master.Jeśli ty:
przejdzie do samego repozytorium.
Wygląda na to, że Twoje repozytorium Alice nie śledzi poprawnie.
Spowoduje to wyświetlenie domyślnego pilota i gałęzi.
Jeśli ty
Powinieneś zacząć śledzić tego pilota i gałąź. Nie jestem pewien, czy ta opcja zawsze była dostępna.
źródło
Odpowiedzi na to pytanie stanowiły dla mnie rozwiązanie ... to był tylko głupi błąd:
Pamiętaj, aby dokonać pierwszego!
https://stackoverflow.com/a/7572252
Jeśli jeszcze nie zaangażowałeś się w lokalne repozytorium, nie masz nic do przekazania, ale komunikat o błędzie Git, który otrzymasz, nie pomaga ci zbytnio.
źródło
to kanoniczny sposób na przeniesienie wszystkiego do nowego pustego repozytorium.
Innym sposobem na zrobienie tego samego jest utworzenie nowego, nie nagiego repozytorium, a następnie utworzenie go bez klonowania
następnie użyj
w oryginalnym (nie nagim) repozytorium.
źródło
git push --all ../test_repo
adres URL repozytorium na końcu polecenia;)Wypróbuj to w swoim
alice
repozytorium (przed wypchnięciem):Lub skonfiguruj go jako domyślny dla swojego użytkownika za pomocą
git config --global …
.git push
domyślnie robiorigin
repozytorium (które zwykle jest repozytorium, z którego sklonowano bieżące repozytorium), ale nie domyślnie wypycha bieżącą gałąź - domyślnie wypycha tylko gałęzie, które istnieją zarówno w repozytorium źródłowym, jak i docelowym.push.default
Zmiennej konfiguracji (patrz git-config (1) ) kontrole cogit push
będzie apelować, gdy nie podano żadnych argumentów „refspec” (czyli coś po repozytorium nazwa). Wartość domyślna określa zachowanie opisane powyżej.Oto możliwe wartości
push.default
:nothing
To zmusza cię do dostarczenia „refspec”.
matching
(domyślnie)Wypycha wszystkie gałęzie, które istnieją zarówno w repozytorium źródłowym, jak i docelowym.
Jest to całkowicie niezależne od oddziału, który jest obecnie wyewidencjonowany.
upstream
lubtracking
(Obie wartości oznaczają to samo. Później było przestarzałe, aby uniknąć pomyłek z gałęziami „zdalnego śledzenia”. Ta pierwsza została wprowadzona w 1.7.4.2, więc będziesz musiał użyć tej drugiej, jeśli używasz Git 1.7.3.1. )
Wypychają bieżącą gałąź do gałęzi określonej przez jej konfigurację „upstream”.
current
To wypycha bieżącą gałąź do gałęzi o tej samej nazwie w docelowym repozytorium.
Te dwa ostatnie kończą się tak samo dla typowych przypadków (np. Praca na lokalnym systemie głównym, który używa źródła / wzorca jako swojego źródła ), ale różnią się, gdy oddział lokalny ma inną nazwę niż jego oddział „powyżej”:
Z
push.default
równąupstream
(lubtracking
), push pójdzie doorigin
„s głównego oddziału. Gdy jest ona równacurrent
, push pójdzie doorigin
„s quickfix oddział.matching
Ustawienie zaktualizujebare
„s mistrza w swoim scenariuszu, gdy zostały ustalone. Aby to ustalić, możesz użyćgit push origin master
raz.Jednak
upstream
ustawienie (a możecurrent
) wydaje się, że może być lepiej dopasowane do tego, czego oczekujesz, więc możesz spróbować:(Ponownie, jeśli nadal używasz Git przed 1.7.4.2, będziesz musiał użyć
tracking
zamiastupstream
).źródło
Korzystam z klienta git SourceTree i widzę, że ich początkowa komenda commit / push to:
źródło