Gerrit/Odstraňování problémů

This page is a translated version of the page Gerrit/Troubleshooting and the translation is 97% complete.
Outdated translations are marked like this.

Toto je centrální místo pro dokumentaci odstraňování problémů s Git, Gerrit a git-review.

ssh

Bad server host key: Invalid key length

Pokud se při testování ssh zobrazí tato chyba, například:

tony@thor:~$ ssh -p 29418 shelluser@gerrit.wikimedia.org
Bad server host key: Invalid key length

Zkuste snížit minimální délku klíče RSA, například:

$ ssh -p 29418 -o RequiredRSASize=1024 shelluser@gerrit.wikimedia.org
The authenticity of host '[gerrit.wikimedia.org]:29418 ([208.80.154.151]:29418)' can't be established.
RSA key fingerprint is SHA256:j7HQoQ6fIuEgDHjONjI2CZ+2Iwxqgo2Ur5LbPqBgxOU.
No matching host key fingerprint found in DNS.
This key is not known by any other names.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added '[gerrit.wikimedia.org]:29418' (RSA) to the list of known hosts.

  ****    Welcome to Gerrit Code Review    ****

  Hi AccountName, you have successfully connected over SSH.

  Unfortunately, interactive shells are disabled.
  To clone a hosted Git repository, use:

  git clone ssh://shelluser@gerrit.wikimedia.org:29418/REPOSITORY_NAME.git

Connection to gerrit.wikimedia.org closed.
$

Tuto konfiguraci můžete trvale uložit úpravou svého ~/.ssh/config:

# Work around error: Bad server host key: Invalid key length
Host gerrit.wikimedia.org
RequiredRSASize 1024

git clone

fatal: The remote end hung up unexpectedly

Podívejte se na https://stackoverflow.com/questions/6842687/the-remote-end-hung-up-unexpectedly-while-git-cloning pro některé nápady a odlaďte problém nastavením proměnné prostředí GIT_TRACE=1.

The authenticity of host '[gerrit.wikimedia.org]:29418 (....)' can't be established.

The authenticity of host '[gerrit.wikimedia.org]:29418 ([2620:0:861:2:208:80:154:137]:29418)' can't be established.
RSA key fingerprint is SHA256:j7HQoQ6fIuEgDHjONjI2CZ+2Iwxqgo2Ur5LbPqBgxOU.
No matching host key fingerprint found in DNS.
Are you sure you want to continue connecting (yes/no)?

V takovém případě prosím zkontrolujte, zda hodnota uvedená v řádku "RSA key fingerprint is SHA256:j7HQoQ6fIuEgDHjONjI2CZ+2Iwxqgo2Ur5LbPqBgxOU" odpovídá otisku prstu zveřejněnému na wikitech:Help:SSH_Fingerprints/gerrit.wikimedia.org:29418.

Pokud jsou hodnoty stejné, stačí stisknout yes.

Pokud z nějakého důvodu nejsou hodnoty stejné, existuje bezpečnostní riziko a okamžitě se přestanete pokoušet o připojení.

scp od commit-msg háček selže s "požadavek subsystému selhal na kanálu 1"

Příkazy Gerrit pro kopírování/vložení Klonovat pomocí commit-msg hook zahrnují příkaz scp[1], který stáhne soubor commit-msg do místního úložiště. Verze OpenSSH >=9 selžou, protože scp se pokusí použít sftp[2], protože scp byl zastaralý. Chcete-li soubor stáhnout, přidejte k příkazu -O. Například:

scp -O -p -P 29418 username@gerrit.wikimedia.org:hooks/commit-msg "projectname/.git/hooks/"

git pull

Please, commit your changes or stash them before you can merge.

Chcete-li zahodit změny (a vše, co jste měli v zásobě):

git stash
git stash clear

Nyní můžete pokračovat v tahu.

git-review

git-review si stěžuje na problémy při instalaci commit-msg háčku

Pokud na tuto chybu narazíte při pokusu o vložení změn pomocí git-review, nepracujete s úložištěm, které bylo naklonováno přes ssh. Chcete-li úspěšně odeslat změny pomocí git-review, musíte klonovat úložiště pomocí ssh, nikoli http nebo https.

git-review si stěžuje na "chybějící Change-id ve zprávě odevzdání"

Pokud po provedení 'git review' obdržíte zprávu o 'missing Change-Id', pak jsou vaše /.git/hooks/commit-msg pravděpodobně nesprávné. Mělo by to vypadat nějak takto:

CHANGE_ID_AFTER="Bug|Issue"
MSG="$1"

# Zkontrolujte, a pokud chybí, přidejte jedinečné ID změny
#
add_ChangeId() {
        clean_message=`sed -e '
                /^diff --git a\/.*/{
                        s///
                        q
                }
                /^Signed-off-by:/d
                /^#/d
        ' "$MSG" | git stripspace`
        if test -z "$clean_message"
        then
                return
        fi

Chybějící zprávu Change-ID také dostanete, když se pokusíte sloučit (git cherry-pick) nějakou změnu z git, která nemá Change-ID. Zdá se, že háček není volán cherry-pick, ale naštěstí je volán git commit -c commit-id.

V níže uvedeném příkladu přesuneme triviální změnu bd7a268e4be2da23ba0b9943c3b0ba1ac88294dc z git master v projektu mediawiki/core na REL1_19.

Chcete-li to opravit, použijte volbu -n (nezavazovat) na git cherry-pick:

git cherry-pick -n bd7a268e4be2da23ba0b9943c3b0ba1ac88294dc
git commit -c bd7a268e4be2da23ba0b9943c3b0ba1ac88294dc

Bohužel, pokud chcete do zprávy přidat původní ID odevzdání (jak to udělal git cherry-pick -x), musíte ho přidat sami.

Pokud jste zapomněli spustit git review -s, "remote" si bude stěžovat na "missing Change-id in commit message".

Ale také navrhne zprávu o potvrzení s Change-Id: INNNXXXNNN... řádek.

Buď:

  • Zkopírujte tento řádek začínající "Change-Id", spusťte git commit --amend a vložte řádek Change-Id pod zprávu odevzdání v textovém editoru, který se otevře.
  • Nebo navrhne opravu háčku:
    gitdir=$(git rev-parse --git-dir); scp -p -P 29418 freephile@gerrit.wikimedia.org:hooks/commit-msg ${gitdir}/hooks/
    

Měli byste být schopni použít kteroukoli metodu (ale háček mi nefungoval), pak opakujte git review -R a mělo by to být dokončeno.

git-review si stěžuje "Máte více než jedno potvrzení, které se chystáte odeslat"

Pokud git review zobrazí varování o více odevzdáních následované seznamem odevzdání jiných lidí, které již byly sloučeny, proveďte následující řešení:

  1. Chcete-li přerušit git-review, odpovězte "ne".
  2. Spusťte git fetch --all nebo git remote update (Oba příkazy dělají přesně to samé, načítají objekty ze všech sad vzdálených úložišť. Stačí si tedy vybrat příkaz, který si snadno zapamatujete, a na druhý zapomenout.)
  3. Znovu spustit git-review

To zajistí, že git-review bude mít aktuální pohled na vzdálený master.

 

Pozadí

Toto bylo opraveno v roce 2012, ale chyba se vrátila. Projekty Wikimedie tím neúměrně trpí, protože na většině projektů Wikimedie je nastaveno defaultrebase=0 a chyba se spustí pouze tehdy, když je zakázán rebasing (buď pomocí tohoto nastavení nebo pomocí příznaku -R).

git-review si stěžuje "Nelze dotazovat informace o patchsetu"

git-review nefunguje správně, pokud git generuje neanglický výstup. Uvidíte chybu, jako je tato:

$ git review -d 62474
Cannot query patchset information
The following command failed with exit code 255
    "ssh -x -p None gerrit query --format=JSON --current-patch-set change:62474"
-----------------------
Bad port ' None'
-----------------------

To je způsobeno chyba v git-review.

Chcete-li to obejít na systému Linux, buď použijte opravu z výše uvedeného hlášení o chybě, nebo nastavte alias, který přinutí git používat anglický výstup. Chcete-li tak učinit, vložte toto do svého instalačního souboru bashrc nebo podobného:

alias git="LANG=C git"

git-review si stěžuje "ConfigParser.NoSectionError: Žádná sekce: 'updates'"

Pokud k tomu dojde (phab:T57732, opravena v novějších verzích git-review):

$ git review -s
Traceback (most recent call last):
  File "/usr/local/bin/git-review", line 1196, in <module>
    main()
  File "/usr/local/bin/git-review", line 1108, in main
    needs_update = latest_is_newer()
  File "/usr/local/bin/git-review", line 179, in latest_is_newer
    if not configParser.getboolean("updates", "check"):
  File "/usr/lib/python2.7/ConfigParser.py", line 368, in getboolean
    v = self.get(section, option)
  File "/usr/lib/python2.7/ConfigParser.py", line 607, in get
    raise NoSectionError(section)
ConfigParser.NoSectionError: No section: 'updates'

Přidání něčeho takového do ".gitreview" problém vyřeší:

[updates]
check=off

git-review nemá rád slučovací commity

Pokud jste sloučili vývojovou větev a nyní chcete Gerritu odeslat slučovací commit, git review vám to možná nedovolí. Může vás požádat o odeslání velkého množství změn z jedné ze sloučených větví nebo jinak zkomplikovat odevzdání. Abyste tomu zabránili, pošlete potvrzení přímo Gerritu a vynechejte git review:

git push gerrit HEAD:refs/for/master

Další informace naleznete v [dokumentaci http://gerrit-documentation.googlecode.com/svn/Documentation/2.3/user-upload.html#push_create Gerritu].

git-review si stěžuje "Pracovní strom je znečištěný"

Pokud po provedení 'git review' obdržíte zprávu "Working tree is dirty", zkuste provést 'git add' pro změněné (nebo vytvořené soubory), poté git commit a poté git review. (To bylo vidět na Mac OS X se starším git klientem.)

git-review si stěžuje "Autentizace selhala"

Pokud vidíte

remote: Unauthorized
fatal: Authentication failed for 'https://gerrit.wikimedia.org/r/some/code/repository'

pak se pokoušíte odeslat přes HTTPS místo SSH, které jste nastavili dříve. Pravděpodobně budete chtít nakonfigurovat git pro použití vzdáleného ovladače SSH místo vzdáleného HTTPS.

Gerrit

Gerrit si stěžuje, že "Vaši změnu nelze sloučit kvůli konfliktu cest"

Chcete-li změnu sloučit, musíte ji znovu založit.

Pro netrpělivé:

git checkout master
git pull
git-review -d <change #>
git rebase origin/master
git status
<edit "both modified" files in status report>
git add <files>
git rebase --continue
git review

Úplné vysvětlení

 
Gerrit neřeší konflikty kouzlem :)

Odeslali jste tedy změnu a byla schválena. Ale v době, kdy to bude zkontrolováno, další commity změnily hlavní úložiště, což nyní způsobuje konflikt. Gerrit nemůže automaticky sloučit vaši změnu do úložiště, budete to muset opravit a znovu odeslat změnu.

Níže uvedený příklad je založen na skutečném případu použití: změna 2514 pomocí úložiště operací/puppet

Nejprve načtěte změnu pomocí git-review a její možnosti -d:

(production)$ git-review -d 2514
Downloading refs/changes/14/2514/1 from gerrit into review/hashar/ignore_pyc
Switched to branch 'review/hashar/ignore_pyc'
(review/hashar/ignore_pyc)$

hashar je uživatelské jméno, ignore_pyc název zadaného tématu. Všimněte si, jak vás git-review automaticky umístil do větve.

Nyní musíte provést rebase na vrcholu hlavní větve. Změna na gerrit ukazuje větev, stačí přidat "gerrit/" dopředu. Pro tuto změnu v repo na operations/puppet je hlavní větev "production", takže rebase na gerrit/production. U ostatních repo operací je to obvykle origin/master.

(review/hashar/ignore_pyc)$ git rebase gerrit/production
First, rewinding head to replay your work on top of it...
Applying: pyc files are now ignored
Using index info to reconstruct a base tree...
Falling back to patching base and 3-way merge...
Auto-merging .gitignore
CONFLICT (content): Merge conflict in .gitignore
Failed to merge in the changes.
Patch failed at 0001 pyc files are now ignored
 
When you have resolved this problem run "git rebase --continue".
If you would prefer to skip this patch, instead run "git rebase --skip".
To check out the original branch and stop rebasing run "git rebase --abort".
(no branch)$

Klíčem ve výše uvedeném výstupu je řádek začínající CONFLICT. Říká vám název souboru, který git nemohl čistě přeložit, obvykle proto, že jej změnil váš patch a změnily jej také změny v hlavní větvi. Spuštění git status to potvrzuje:

(no branch)$ git status
# Not currently on any branch.
# Unmerged paths:
#   (use "git reset HEAD <file>..." to unstage)
#   (use "git add/rm <file>..." as appropriate to mark resolution)
#
#	both modified:      .gitignore
#
(no branch)$

Upravte konfliktní soubor (v tomto případě .gitignore). Toto bude mít kolem konfliktních čar značky <<<<, ==== >>>, musíte to vyčistit. Během konfliktu sloučení git vytvoří soubory file.BASE.xxx, file.LOCAL.xxx a file.REMOTE.xxx se třemi zdrojovými verzemi. Pro výběr řádků, můžete použít nástroj třícestného sloučení; git mergetool zabaluje použití nástroje pro sloučení.

Jakmile dokončíte úpravy, musíte tuto úpravu přidat, abyste ji mohli použít během rebase, a poté pokračovat v opravě všech konfliktních záplat:

(no branch)$ git add .gitignore
(no branch)$ git rebase --continue
Applying: pyc files are now ignored
(review/hashar/ignore_pyc)$

Protože již nebylo možné opravit žádné opravy, byli jste umístěni zpět do větve review/hashar/ignore_pyc. Pohled do logu:

$ git log -n5 --decorate --pretty=oneline
* a3631d2 (HEAD, review/hashar/ignore_pyc) pyc files are now ignored (2 seconds ago
* 1b6cd67 (gerrit/production, production) ensure sample config file removed (18 hours ago)
...

Před opětovným odesláním do gerritu ověřte, že vaše změna vypadá dobře. Stačí použít git show <sha1 potvrzení>, tedy git show a3631d2. Nakonec jej můžete upravit tak, aby uvedl, že jste změnu znovu založili.

Nyní odešlete změnu zpět do úložiště:

(review/hashar/ignore_pyc)$ git review
remote: Resolving deltas:   0% (0/2)
To gerrit.wikimedia.org
(review/hashar/ignore_pyc)$

Vraťme se ke Gerritu, změnou je nová sada patchů, která čeká na kontrolu.

Gratulujeme k vyřešení vašeho prvního konfliktu rebase / sloučení!

V Gerritu se vaše změna, po obdržení +2, nesloučí

Pokud někdo zadá +2 kód zkontrolován, mělo by to spustit řadu automatických sestavení a testů. Nepřetržitá integrace/Workflow popisuje tok.

V Gerritu by měl "uživatel" jenkins-bot přidat komentář

Starting gate-and-submit jobs. https://integration.wikimedia.org/zuul/

Kliknutím na odkaz zobrazíte průběh testů pro vaši změnu, kterou Zuul odeslal na Jenkins.

Pokud nevidíte komentář "Starting gate-and-submit jobs" v gerritu, podívejte se na https://integration.wikimedia.org/zuul/ Zobrazuje vše, co Zuul předložil Jenkins, a číslo "Queue length" (délka fronty) nahoře je počet událostí, které ještě nebyly zpracovány. Pokud se vaše úloha na stránce níže nezobrazí, ale délka fronty je nenulová, je pravděpodobně ve frontě. Zuul a Jenkins jsou pravděpodobně zaneprázdněni a vy musíte jen počkat. Pokud je však délka fronty 0 a vaše změna se neobjeví, znamená to, že k ní nedojde a musíte ji znovu odeslat. Všimněte si, že nové repozitáře musí být manuálně přidány do seznamu jenkins-bot.

Pokud všechny požadované testy projdou (všimněte si, že některé jsou "bez hlasování"), pak jenkins-bot přidá komentář "Build succeeded" následovaný "Change has been successfully merged into the git repository."

V Gerrit Jenkins dal -2, takže musíte Jenkins přepsat

Především byste to neměli dělat víceméně nikdy. (Zatím bylo důvodem zpětné portování změny na staré vydání, které mělo nefunkční testy). Pokud má Jenkins -2, obecně nemůžete sloučit změnu. Co potřebuješ udělat:

  • Odebírání recenze jenkins-bot "Verified" (klikněte na [x])
  • Prohlédněte si nejnovější sadu oprav s "Verified +2" kromě "Code-Review +2" (toto je normálně vyhrazeno pro Jenkins, ale protože to přepisujeme, nahrazujeme jeho skóre svým vlastním)
  • Klikněte na "Publikovat a odeslat"

Chyba "Oprávnění odepřeno (veřejný přístup)"

Obecně byste měli zkontrolovat podrobný výstup SSH pomocí ssh -v -p 29418 <username>@gerrit.wikimedia.org (další podrobnosti můžete získat pomocí -vv/-vvv, ale obvykle stačí úroveň ladění 1). Existuje mnoho důvodů, proč se vám tato chyba může zobrazit, většina z nich souvisí s místní chybnou konfigurací, například váš klíč SSH není čitelný nebo neodpovídá tomu, který jste nahráli do Gerritu, nebo používáte zastaralý algoritmus (viz také T276486).

fatal: Could not read from remote repository.

Pokud se zobrazí chyba

Permission denied (publickey).
fatal: Could not read from remote repository.
Please make sure you have the correct access rights and the repository exists.

Za prvé, pokud používáte Windows, ujistěte se, že používáte Git Bash jako nástroj příkazového řádku.

OpenSSH deaktivoval podporu pro staré klíče id_rsa od verze 8.8. ssh-keygen však bude nadále generovat klíče RSA, pokud se použije bez argumentů. Takové klíče budou prostě ignorovány, což povede k výše uvedené záhadné chybové zprávě. Musíte buď vytvořit nový klíč id_ed25519, jak je popsáno v Gerrit tutoriálu (doporučeno), nebo znovu povolit podporu pro klíče RSA pomocí volby HostkeyAlgorithms OpenSSH, jak je popsáno v poznámkách k vydání.

Poté prosím sdílejte výstup příkazu git remote show origin, spusťte dotčený příkaz git s ladicími proměnnými protokolování, jako je GIT_CURL_VERBOSE=1 GIT_TRACE=1, a otestujte, zda ssh -p 29418 username@gerrit.wikimedia.org (nahraďte username v tomto příkazu uživatelským jménem vašeho účtu vývojáře) ukazuje Hi username, you have successfully connected over SSH.

fatal: The remote end hung up unexpectedly

Pokud se zobrazí chyba

Permission denied (publickey).
fatal: The remote end hung up unexpectedly

Pak právě nejste přihlášeni ke svému ssh klíči. Řešení: Proveďte ssh-add ~/.ssh/id_rsa, aby vás vyzval k zadání přístupové fráze pro váš klíč a přidejte jej do aktivního svazku klíčů. Pak můžete zkontrolovat, co je ve svazku klíčů s ssh-add -l. Pak zkuste znovu zasílat kontrolu.

Otisk serveru Gerrit je

dc:e9:68:7b:99:1b:27:d0:f9:fd:ce:6a:2e:bf:92:e1

takže můžete říci ano, když vás požádá o přidání tohoto otisku do souboru known_hosts.

Mějte na paměti, že gerrit naslouchá na portu 29418 a pokud jste z nějakého důvodu zapomněli zadat číslo portu, možná narazíte na "normálního" démona SSH naslouchajícího na portu 22 (tento má RSA klíčový otisk b5:e9:dc:b2:dd:6e:70:f7:18:8a:dc:a3:5d:ab:99:4d).

Chcete-li zkontrolovat, zda je připojení SSH a ověřování veřejným klíčem, použijte ssh -p 29418 username@gerrit.wikimedia.org, který by měl ukazovat Hi username, you have successfully connected over SSH.

U vaší změny neprobíhají testy

Testy spouští pouze uživatelé v seznamu povolených CI[3]. Další informace viz Nepřetržitá integrace/Seznam povolených.

Různé

Push pomocí HTTPS (když SSH není funkční)

Kvůli bezpečnostnímu incidentu byl přístup https push (dočasně?) zakázán. Následující část proto nemusí být použitelná.
Rozšířený obsah

Tato metoda je užitečná pro odesílání změn do Gerritu, když SSH není funkční (například SSH je blokováno vaší institucí nebo poskytovatelem internetu).

Pokud SSH nefunguje, měla by se zobrazit jedna z těchto chybových zpráv:

ssh: connect to host gerrit.wikimedia.org port 29418: Connection refused
ssh: connect to host gerrit.wikimedia.org port 29418: Network is unreachable

Příkaz můžete také explicitně vyzkoušet

ssh -p 29418 your-user-name@gerrit.wikimedia.org

Pokud je SSH funkční, měl by tento příkaz vytvořit následující výstup:

Connection to gerrit.wikimedia.org closed by remote host.
Connection to gerrit.wikimedia.org closed.

Když SSH nefunguje, potřebujete heslo HTTP(S), které lze vygenerovat v Nastavení účtu Gerrit pod "HTTP heslo". Po vygenerování hesla potvrďte všechny změny pro váš patch a použijte je

git push https://<username>@gerrit.wikimedia.org/r/mediawiki/core HEAD:refs/for/master

Pro úspěšné odeslání změn je třeba zadat ověřovací údaje. Výše uvedená adresa URL je pro jádro MediaWiki a podle toho se bude lišit u rozšíření. Například pokud chcete push na Extension:LiquidThreads , příkaz by byl

git push https://<username>@gerrit.wikimedia.org/r/mediawiki/extensions/LiquidThreads HEAD:refs/for/master

Chcete-li vždy používat https, nejprve klonujte pomocí:

git clone https://<username>@gerrit.wikimedia.org/r/mediawiki/core

Nebo upravte stávající úložiště pomocí:

git remote set-url origin https://<username>@gerrit.wikimedia.org/r/mediawiki/core

Pak můžete normálně použít git review.

K uložení hesla HTTPS můžete použít úložiště pověření Git, abyste ho nemuseli pokaždé zadávat.

Háček commit a Change-Id

Hlavním problémem, který vzniká při použití HTTPS pro odesílání změn, je to, že se automaticky nepřipojuje háček potvrzení. Hack pro tento přístup je provést jeden neúspěšný pokus o push. Pokud tak učiníte, chybová zpráva automaticky zvýrazní Change-Id, viz příklad níže:

Username for 'https://gerrit.wikimedia.org': xxxxxx
Password for 'https://xxxxxx@gerrit.wikimedia.org':
Counting objects: 25, done.
Delta compression using up to 2 threads.
Compressing objects: 100% (4/4), done.
Writing objects: 100% (4/4), 448 bytes | 0 bytes/s, done.
Total 4 (delta 3), reused 0 (delta 0)
remote: Resolving deltas: 100% (3/3)
remote: Processing changes: refs: 1, done
remote: ERROR: missing Change-Id in commit message footer
remote: Suggestion for commit message:
remote: Commit message appears here
remote:
remote: Change-Id: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
remote:
remote: Hint: To automatically insert Change-Id, install the hook:
remote:   gitdir=$(git rev-parse --git-dir); scp -p -P 29418 xxxxxx@gerrit.wikimedia.org:hooks/commit-msg ${gitdir}/hooks/
remote:
remote:
To https://gerrit.wikimedia.org/r/mediawiki/extensions/Test
 ! [remote rejected] HEAD -> refs/for/master (missing Change-Id in commit message footer)
error: failed to push some refs to

Nyní zkopírujte ID změny a změňte své odevzdání. Vždy přidejte Change-Id jako poslední řádek vaší zprávy odevzdání.

git commit --amend

Tím se otevře editor pro změnu zprávy odevzdání. Vložte Change-Id jako poslední řádek zprávy a uložte jej. Viz příklad:

Your commit summary

Your commit message

Bug: Txxxxx
Change-Id: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

Nyní můžete úspěšně tlačit na Gerrit.

Automatické přidávání háčku odevzdání

Chcete-li získat skript commit-msg:

scp -p -P 29418 USERNAME@gerrit.wikimedia.org:hooks/commit-msg <local path to your git>/.git/hooks/

Podrobnosti viz https://gerrit.wikimedia.org/r/Documentation/cmd-hook-commit-msg.html.

Za proxy serverem

Tato sekce není testována. V případě problémů aktualizujte tuto část o aktualizované informace

Pokud jste za proxy serverem, musíte také klonovat přes HTTPS. Ujistěte se, že je proměnné prostředí HTTPS_PROXY nastaveno správně. Chcete-li ladit problémy, zkuste spustit GIT_CURL_VERBOSE=1, např.

GIT_CURL_VERBOSE=1 git clone https://gerrit.wikimedia.org/r/pywikibot/core.git

V případě problémů zkuste poskytnout HTTPS_PROXY přímo, např.

HTTPS_PROXY=proxy_server GIT_CURL_VERBOSE=1 git clone https://gerrit.wikimedia.org/r/mediawiki/core.git

nebo použijte přímo možnosti git:

GIT_CURL_VERBOSE=1 git -c http.proxy="proxy_server" clone https://gerrit.wikimedia.org/r/mediawiki/core.git

Tato poslední možnost by měla fungovat také pro proxy servery SOCKS, pomocí

GIT_CURL_VERBOSE=1 git -c http.proxy="socks5://socks_server" clone https://gerrit.wikimedia.org/r/mediawiki/core.git

Push pouze pomocí SSH (když je HTTPS zakázáno nefunkční)

Přidejte do své místní '.gitconfig' následující sekci:

# Použijte SSH přes HTTPS
[url "ssh://username@gerrit.wikimedia.org:29418/"]
	pushInsteadOf = https://gerrit.wikimedia.org/r/

"git commit --amend" si stěžuje "you are in the middle of a merge -- cannot amend"

Když po rebasingu a sloučení vašeho

git commit --amend

výsledky v

message: fatal: You are in the middle of a merge -- cannot amend.

použijte tyto kroky a znovu použijte změny

git stash
git reset --hard
git checkout master
git review -d <change number>
git stash pop
git commit -a --amend

Pokud, po git review jenkins-bot e-maily Tuto změnu nebylo možné automaticky sloučit s aktuálním stavem úložiště. Znovu založte změny a nahrajte novou sadu patchů. To může znamenat, že hlavní větev serveru má nyní konflikty sloučení s vaší opravou. Podívejte se na pokročilé použití Gerritu a zjistěte, jak je opravit.

Your change requires a recursive merge to resolve

Pokud se zobrazí chyba "Your change requires a recursive merge to resolve", musíte změnit základ sady změn oproti hlavní.

  1. Ujistěte se, že vaše hlavní větev je aktuální: git pull origin master
  2. Vytvořte a přepněte se do nové větve, ve které chcete provést rezervaci sady změn s konfliktem: git checkout -b BRANCHNAME
  3. Zkontrolujte sadu konfliktních změn v této větvi. Správný příkaz můžete zkopírovat/vložit z části 'Stáhnout' v recenzi Gerrit. Bude to vypadat nějak takto: git fetch ssh://awjrichards@gerrit.wikimedia.org:29418/mediawiki/extensions/MobileFrontend refs/changes/14/3414/3 && git checkout FETCH_HEAD
  4. Rebase proti master: git rebase master
  5. Odešlete změnu Gerritu ke kontrole: git review
  6. Znovu zkontrolujte sadu změn v Gerritu a poté odešlete změny, které mají být sloučeny do hlavní.

master"_and_"failed to push some refs"">

"[remote rejected] master -> master" a "failed to push some refs"

Pokud push na jinou pobočku než refs/for/master, obdržíte něco ve smyslu:

$ git push
Counting objects: 5, done.
Delta compression using up to 8 threads.
Compressing objects: 100% (3/3), done.
Writing objects: 100% (3/3), 709 bytes, done.
Total 3 (delta 1), reused 0 (delta 0)
remote: Resolving deltas:   0% (0/1)
To ssh://username@gerrit.wikimedia.org:29418/test/mediawiki/extensions/examples
 ! [remote rejected] master -> master (prohibited by Gerrit)
error: failed to push some refs to 'ssh://username@gerrit.wikimedia.org:29418/test/mediawiki/extensions/examples'

To znamená, že jste se místo odeslání změn ke kontrole pokusili zavázat k větvi "master".

Následuje podobná chyba, kdy se git review pokoušel odeslat do neexistující vzdálené větve:

! [remote rejected] T12345 -> T12345 (prohibited by Gerrit)
error: failed to push some refs to 'ssh://username@gerrit.wikimedia.org:29418/test/mediawiki/extensions/examples'

Odpovídající chyba, kdy se git branch pokoušel odeslat do neexistující vzdálené větve: Zkuste rebasing, aby push pracoval správně:

git pull --rebase origin master
git review -R

[remote rejected] HEAD -> refs/publish/master/??? (Cannot merge change to another branch)

Při pokusu o výběr změny nebo sloučení celé větve a následné odeslání ke kontrole. Gerrit bude velmi zmatený, pokud mu výslovně neřeknete, jakou větev upravujete. Můžete dostat chyby jako:

! [remote rejected] HEAD -> refs/publish/master/mwalker_test (change 59546 closed)

nebo

! [remote rejected] HEAD -> refs/publish/master/mwalker_test (no new changes)

V tomto případě se musíte ujistit, že soubor .gitreview vaší pobočky má správnou výchozí volbu větve (např. měl by ukazovat na větev, kterou se pokoušíte upravit), nebo musíte ručně vložit refspec pomocí git push gerrit HEAD:refs/for/<branch>

! [remote rejected] HEAD -> refs/publish/master (prohibited by Gerrit: not permitted: create)

Pokud používáte git-review k odesílání záplat do gerritu, ujistěte se, že máte 1.27 nebo novější (ne 1.26). git-review 1.26 nefunguje s Gerritem 3.

! [remote rejected] HEAD -> refs/changes/79/550379/2 (cannot add patch set to 550379.)

K tomu dojde, pokud nejste původním autorem (vlastníkem) změny (v tomto případě 550379). Abyste mohli přidat novou sadu oprav do odevzdání, které jste nevytvořili, požádejte o přidání do skupiny Trusted-Contributors na Gerritu. Každý člen této skupiny si vás může na požádání přidat.

E-mailová adresa zadavatele neodpovídá vašemu uživatelskému účtu.

remote: ERROR:  committer email address (email)
remote: ERROR:  does not match your user account.

Existují dva možné problémy, které by mohly způsobit tuto chybu. Pokud je e-mailová adresa, kterou se objeví zpět, e-mailovou adresou, kterou chcete použít s Gerritem, pak byste měli přidat tuto e-mailovu adresu do Gerritu a ujistěte se, že kliknete na odkaz na potvrzení v e-mailu, který vám Gerrit pošle. Pak zkuste provést push znovu.

Pokud však git pošle zpět nějaký nesmyslný e-mail (například ten, který už nepoužíváte, nebo místní e-mailovou adresu jako root@localhost), měli byste udělat následující:

$ git config --global user.email yournewemail@example.org
$ git commit --amend --reset-author

Chcete-li to provést lokálně pouze pro toto úložiště, místo toho proveďte:

$ git config user.email yournewemail@example.org
$ git commit --amend --reset-author

Pak zkuste provést push znovu.

Sestavení se nezdařilo kvůli konfliktu sloučení

Po e-mailech s jenkins-bot 'git review' Tuto změnu nebylo možné automaticky sloučit s aktuálním stavem úložiště. Znovu založte změny a nahrajte nový patchset. To může znamenat, že hlavní větev serveru má nyní konflikty sloučení s vaší opravou.

$ git checkout master
$ git fetch --all
$ git reset --hard origin/master
  • Checkout pro kontrolu, rebase, recommit
$ git review -d <patchNumber>
$ git rebase master
# Opravte konflikty sloučení a přidejte je pomocí 'git add'
$ git rebase --continue
$ git review -R

Pokud k chybě dojde, i když jste opravili svůj patch, jak je uvedeno výše, zkuste provést libovolnou změnu ve zprávě odevzdání a poté znovu spustit git review (související s bug 53895).

Zpráva "Everything up-to-date" po git push

Pokud se pokusíte provést 'git push' po provedení 'git commit', můžete obdržet odpověď 'Everything up-to-date'. Nedávali jste pushed na větev. Chcete-li přesunout změny do gerritu, musíte udělat 'git review' a pouze z gerritu bude větev aktualizována. Zdá se, že jde o vedlejší účinek odhlášení mastera jako pobočky od února 2012.

V některých projektech (např. test/) je možné provést 'git push' místo 'git review' a dosáhnout úspěchu. Pravděpodobně je lepší to nedělat, protože to mate ty, kteří vaše změny najdou později a nevědí, odkud pocházejí.

Označení rozšíření nefunguje

Pokud chcete své rozšíření označit, musíte se ke gerritu připojit pomocí ssh, nikoli https. Ve vašem .git/config by vzdálená adresa URL měla vypadat takto:

[remote "origin"]
	url = ssh://username@gerrit.wikimedia.org:29418/r/mediawiki/extensions/yourextension
	fetch = +refs/heads/*:refs/remotes/origin/*

K označení rozšíření použijte git tag následovaný git push:

git tag -a v1.4 -m 'my version 1.4'
git push --tags

Plugin install error: TypeError: self.onAction is not a function

Pokud se zobrazí tato chyba, důkladně obnovte mezipaměť prohlížeče.

Někomu nestačí Ctrl + F5 nebo Shift + Ctrl + F5 (nebo jakákoli kombinace, kterou váš prohlížeč požaduje).

Pokud problém přetrvává i po stisknutí kombinace kláves F5 prohlížeče, zkuste vymazat mezipaměť navždy.

Například ve Firefoxu postupujte podle kroků 1-6

Pokud používáte jiný prohlížeč, měl by vám umožnit vymazat webový obsah uložený v mezipaměti také někde v nastavení. Najděte to na stránkách nápovědy vašeho prohlížeče a postupujte podle pokynů.

Bad server host key: Invalid key length

Uživatelé, kteří používají Fedoru 33 nebo novější s nastavením kryptoměn DEFAULT nebo FUTURE, nemohou používat Git přes SSH na Gerritu. (souvisí s T326204)

Dotčení uživatelé mohou tento problém vyřešit snížením požadavku na minimální délku klíče pro gerrit.wikimedia.org konkrétně v jejich souboru ~/.ssh/config:

Host gerrit.wikimedia.org
    RSAMinSize 1023

Poznámky pod čarou

  1. Secure copy (scp)
  2. Secure File Transfer Protocol (sftp)
  3. Nepřetržitá integrace (CI)