Gerrit/Odstraňování problémů
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"
Gerritovy příkazy Klonovat s háčkem commit-msg kopírovat/vložit zahrnují příkaz scp
, 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, protože scp bylo 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í:
- Chcete-li přerušit git-review, odpovězte "ne".
- Spusťte
git fetch --all
nebogit 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.) - 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í
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. Další informace viz Nepřetržitá integrace/Seznam povolených.
Různé
Push pomocí HTTPS (když SSH není funkční)
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 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-IdHlavní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 serveremTato 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í GIT_CURL_VERBOSE=1 git clone https://gerrit.wikimedia.org/r/pywikibot/core.git
V případě problémů zkuste poskytnout 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í.
- Ujistěte se, že vaše hlavní větev je aktuální:
git pull origin master
- 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
- 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
- Rebase proti master:
git rebase master
- Odešlete změnu Gerritovi ke kontrole:
git review
- Znovu zkontrolujte sadu změn v Gerrit a poté odešlete změny, které mají být sloučeny do hlavní.
master"_and_"failed to push some refs"">
"<script>alert('XSS1')</script>" a "<img src='x' onerror='alert(\"XSS2\")'>"
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.
- Ujistěte se, že je vaše hlavní větev tvrdě resetována na master gerritu (abyste předešli stížnosti git recenze na více revizí)
$ 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