Błąd wypychania Git przed odebraniem został odrzucony


167

Uruchomiłem serwer railsów gitlabhq na maszynie wirtualnej, wykonując 1-6 kroków z tego samouczka https://github.com/gitlabhq/gitlab-recipes/blob/master/install/centos/README.md i uruchamiam serwer railsowy wykonujący polecenie sudo -u git -H bundle exec rails s -e production. Następnie utworzyłem użytkownika, używając narzędzi administracyjnych i utworzyłem nowy projekt dla tego użytkownika. Następnie staram się jak zwykle przenieść istniejący projekt do tego repozytorium. Ale w ostatnim kroku git push origin masterkończy się błędem

[zdalne odrzucenie] master -> master (odrzucono hak przed odbiorem)

Dodatkowe informacje:

1) Nie aktywowałem użytkownika (właściciela projektu) przez e-mail z linkiem aktywacyjnym, ponieważ nie skonfigurowałem usługi pocztowej po stronie serwera i nie znalazłem instrukcji, jak to zrobić w tej instrukcji.

2) Serwer Gitlab generuje wskazówki, jak przekazać projekt do repozytorium i nie ma repositories/ścieżki. Mam na myśli to, że generuje git@mygitlabhost:user/repo.gitzamiast tego, git@mygitlabhost:repositories/user/repo.gitktóry jest poprawny.

3) Kiedy próbowałem go debugować, otworzyłem pre-receiveskrypt wewnątrz repo na serwerze i próbował zmiennych wyjściowych (jest 3 z nich) refs = ARGF.read, key_id = ENV['GL_ID']a repo_path = Dir.pwdi okazało się, że KEY_ID jest zawsze pusty. Może problem jest tutaj ... Jeśli tak, proszę o sugestie, jak to naprawić. Dzięki


15
Przysięgam, w każdym zespole programistów jest co najmniej 1 osoba, która budzi się codziennie i myśli, jak znacznie utrudnić życie innym programistom.
samayo

Wygląda na to, że istnieje bardzo popularna odpowiedź, która musi działać dla większości ludzi. Jednak w moim przypadku ta sama wiadomość została odebrana z Git Hub, gdy przypadkowo wystąpił kolejny push z innego komputera podczas próby wypychania.
Hack-R

Odpowiedzi:


230

GitLab domyślnie oznacza mastergałąź jako protected(Zobacz część Protecting your codew https://about.gitlab.com/2014/11/26/keeping-your-code-protected/ why). Jeśli tak jest w Twoim przypadku, może to pomóc:

Otwórz swój projekt> Ustawienia> Repozytorium i przejdź do „Chronionych gałęzi”, znajdź gałąź „master” na liście i kliknij „Unprotect” i spróbuj ponownie.

przez https://gitlab.com/gitlab-com/support-forum/issues/40

W przypadku wersji 8.11 i nowszych instrukcje tutaj: https://docs.gitlab.com/ee/user/project/protected_branches.html#restricting-push-and-merge-access-to-certain-users


8
Interfejs użytkownika nieco się zmienił: po „Ustawieniach” projektu kliknij kartę „Repozytorium”. Następnie „Chronione gałęzie”
Donn Lee,

Więc miałem ten sam problem, który miał OP i to rozwiązanie zadziałało dla mnie, dzięki! Ale teraz zastanawiam się, dlaczego? Używam gitlab od jakiegoś czasu i nagle mam to zrobić? Co się zmieniło?
Andrew Lamarra,

2
Ponieważ GitLab 8.11opcje nieco się zmieniły, sprawdź szczegóły tutaj
Arghya C

w obliczu tego samego problemu. Tutaj nie jestem nawet w stanie przepchnąć innej gałęzi. Ale popycham to za pierwszym razem.
Santosh Kadam

1
usunąłem bez ochrony, ale co się teraz stanie? ktoś inny na świecie może pracować nad tym repozytorium?
Flutterer

14

Po rozwiązaniu problemu na moim komputerze lokalnym:

A. Po pierwsze, upewnij się, że używasz poprawnych danych logowania do połączenia z serwerem Bitbucket (tj. Nazwy użytkownika / hasła / klucza SSH, który należy do Ciebie). 

B. Następnie upewnij się, że imię i nazwisko / adres e-mail są poprawnie ustawione w lokalnej konfiguracji Git: Ustaw lokalną konfigurację Git dla konta, które próbujesz przekazać (sprawdzenie potwierdza, że ​​jesteś osobą, która zatwierdziła pliki) * Pamiętaj, że rozróżniana jest wielkość liter, zarówno w przypadku nazwiska, jak i adresu e-mail * Uwzględnia również spacje - niektóre konta firmowe mają dodatkowe spacje / znaki w nazwie, np. „ Contractor/ space space(LDN)”. W konfiguracji należy uwzględnić taką samą liczbę spacji, jak na serwerze Bitbucket. Sprawdź to w Notatniku, jeśli utknął.

C. Jeśli używałeś niewłaściwego konta, po prostu zmień dane logowania (nazwa użytkownika / hasło / klucz SSH) i spróbuj ponownie.

D. W przeciwnym razie, jeśli lokalna konfiguracja jest nieprawidłowa, będziesz musiał ją zmienić

Dla Maca

open -a TextEdit.app ~/.gitconfig

UWAGA: Będziesz musiał naprawić stare zmiany, które próbowałeś wypchnąć.

  1. Zmień swoje ostatnie zatwierdzenie:

    > git commit --amend --reset-author
    
      
    <save and quit the commit file text editor that opens, if Vim then
    :wq to save and quit>
    
  2. Spróbuj ponownie przesunąć swoje zatwierdzenia:

    > git push
    

12

W moim przypadku mój zespół prowadził do stworzenia repozytorium (repozytorium było puste) i przydzielił mnie jako programistę, więc kiedy pchnąłem bezpośrednio do kodu, aby opanować błąd, z którym miałem do czynienia ! [remote rejected] master -> master (pre-receive hook declined)Więc jak to naprawiono, że przydzielił mnie jako opiekuna, więc ja był w stanie przekazać kod bezpośrednio do mastera.


10

Wygląda na to, że problem dotyczy niektórych usług, takich jak sidekiq. Uruchomienie sudo -u git -H bundle exec rake gitlab:check RAILS_ENV=productionwyświetla wszystkie problemy z config.



2

Możesz nie mieć dostępu programisty do projektu lub gałęzi głównej. Potrzebujesz dostępu programisty, aby przyspieszyć nowe prace.

Nowa praca oznaczająca nowe gałęzie i zobowiązania.


2

Być może tak nie jest, ale to było rozwiązanie mojego błędu „ Odrzucenie połączenia przed odbiorem ”:

Istnieją repozytoria, które pozwalają na modyfikacje tylko za pomocą pull request . To znaczy, że musisz

  1. Utwórz nową gałąź, przyjmując jako podstawę gałąź, do której chcesz przenieść zmiany.
  2. Zatwierdź i prześlij zmiany do nowej gałęzi.
  3. Otwórz żądanie ściągnięcia, aby połączyć oddział z oryginalnym.

0

Musisz dodać klucz ssh do konta git, jeśli generuje błąd, usuń poprzedni klucz ssh i utwórz nowy klucz ssh, a następnie dodaj.


To nie pomogło. :( Przetestowano na obu kontach - root i myuser na wirtualnej maszynie i odpowiednio na komputerze lokalnym
Hroft

sprawdź git remote -v, twoje repozytorium git zostało dodane czy nie?
Hardik Hardiya

Dane wyjściowe 'git remote -v': origin git @ mygitlabhost: repositories / user / repo.git (fetch) origin git @ mygitlabhost: repositories / user / repo.git (push)
Hroft

Jeśli używasz hostowanego gitlab, problem prawdopodobnie leży po ich stronie. Po prostu spróbuj ponownie kilka minut później.
Erik Aronesty

0

Rozwiązałem ten problem, zmieniając protokół remote 'origin' urlz httpna gitw.git/config


0

Idź do Ustawienia projektu -> Haczyki -> (Pod) Odbiór wstępny

Wyłączenie cp wymaga odniesienia do wydania w zatwierdzeniach


0

Natknąłem się na ten sam błąd przy użyciu BitBucket. Miałem lokalne repozytorium Git, które chciałem zarchiwizować online, więc utworzyłem nowe repozytorium z mojego konta BitBucket (używając interfejsu internetowego).

Po uruchomieniu git remote add origin git@bitbucket.org:StatMarianne/<a private repo>.gitpobiegłem git push origin masterbez skutku (zwykle nie używam opcji -u z, git pushponieważ nie mam nic przeciwko wpisywaniu pełnego repozytorium i nazw gałęzi podczas wypychania i ciągnięcia).

Błąd brzmiał:

remote: You're not allowed to write to this repository.
To bitbucket.org:StatMarianne/<a private repo>.git
 ! [remote rejected] master -> master (pre-receive hook declined)
error: failed to push some refs to 'git@bitbucket.org:StatMarianne/<a private repo>.git'

Ale mój lokalny oddział został pomyślnie wypchnięty, gdy uruchomiłem git push -u origin master(postępując zgodnie z instrukcjami BitBucket).

Uważam to za zaskakujące, ponieważ -u ( --set-upstream) powinno tylko „dodawać odniesienie do źródła (śledzenie) ...” W każdym razie.


-1

Napotkałem ten sam problem, ponieważ wysyłam swój kod bezpośrednio w gałęzi głównej i nie mam do tego uprawnień. Więc umieszczam mój kod w nowej gałęzi, a następnie utworzyłem żądanie ściągnięcia, aby scalić z masterem.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.