Troubleshooting
Git Troubleshooting
Before you're able to push your commits you have to set up your account. Make sure, you setup Git correctly.
Also, you may want to check your configuration
Permission Denied
git push origin HEAD:refs/for/main
Permission denied (publickey).
fatal: The remote end hung up unexpectedly
If this error happens, double check if you are:
- Using the correct SSH user name (which is your user name on typo3.org)
- If your username contains special characters (like @ or !), you must escape them using a backslash (or even better: use a username without special characters)
- You must use an SSH key known to Gerrit
- You must use the correct URL
The following push command (with -v
) shows you the push URL (which must contain review.
):
git push origin HEAD:refs/for/main -v
Pushing to ssh://<username>@review.typo3.org:29418/REPOSITORY_NAME.git
Permission denied (publickey).
fatal: The remote end hung up unexpectedly
Debugging the SSH Connection
Try connecting to the server with using an SSH client (OpenSSH, Putty, etc.):
ssh -p 29418 <username>@review.typo3.org
If the output looks like this, everything is fine:
**** Welcome to Gerrit Code Review ****
Hi <Name>, you have successfully connected over SSH.
Unfortunately, interactive shells are disabled.
To clone a hosted Git repository, use:
git clone ssh://<username>@review.typo3.org:29418/REPOSITORY_NAME.git
Connection to review.typo3.org closed.
Otherwise, your SSH client does not automatically choose the right private key file.
By default, SSH searches for the key in ~/.
and ~/.
.
You can manually specify the location using the -i
parameter:
ssh -p 29418 -i <path-to-private-key> <username>@review.typo3.org
If this works, modify ~/.
to define the file name for
connections to review.
:
Host review.typo3.org
User <username>
IdentityFile ~/.ssh/<keyfile>
Port 29418
Now the connection should work without having to specify any parameters as described above.
If this does not work another issue might be that your SSH version is too new and does not accept the signature algorithm. You can test this by executing:
ssh -v -p 29418 -i <path-to-private-key> <username>@review.typo3.org 2>&1 | grep "no mutual signature algorithm"
If you see the following:
debug1: send_pubkey_test: no mutual signature algorithm
you need to allow the rsa Algorithm in your SSH config:
Host review.typo3.org
...
PubkeyAcceptedKeyTypes +ssh-rsa
Push: invalid committer
git push -v origin HEAD:refs/for/main
Pushing to ssh://<username>@review.typo3.org:29418/REPOSITORY_NAME.git
remote: ERROR: https://review.typo3.org/#/settings/contact
remote:
To ssh://<username>@review.typo3.org:29418/REPOSITORY_NAME.git
! [remote rejected] HEAD -> refs/for/main (invalid committer)
error: failed to push some refs to 'ssh://<username>@review.typo3.org:29418/REPOSITORY_NAME.git'
This message simply means that your email address is not registered as a Web-Identity.
If this error happens, just go to the website that the error message suggests:
https://
. Register the email address you
use to push (button Register New Email) - even if it is already in the dropdown list.
Click on the link you receive via email. Be sure your are already logged in on review.
.
Otherwise the link does register the email address. Check if your new identity is registered
(https://review.typo3.org/#/settings/web-identities). Pushing should work now.
You are not a committer
If you are trying to push changes and get this error message, then your email address is probably not known to the system. Open Settings > Identities in Gerrit and check the email address, which is connected to your account (you can add more of them if needed). Additionally, check your settings in Git with the following command:
git config user.email
If needed, change it with the following command:
git config --global user.email your-email@example.org
You may change the user/author of your last commit with:
git commit --amend
Missing Change-Id in commit message
! [remote rejected] HEAD -> refs/for/X/X (missing Change-Id in commit message)
If pushing a commit fails with this error message, you probably did not copy the commit-hook.
Make sure that the file .git/
exists and is executable.
Afterwards, you have to amend your commit to make it include the Change-Id:
git commit --amend
Push: prohibited by gerrit
If Gerrit rejects your push with:
[remote rejected] main -> main (prohibited by gerrit)
you are likely trying to do a simple git push
. However, as Gerrit prohibits
directly pushing to the target branches, you have to use this lengthy command:
git push origin HEAD:refs/for/<release-branch>
For example:
git push origin HEAD:refs/for/main
Push: Invalid Key Format
You get an error about an invalid key format. This might happen if you didn't save your key in the OpenSSH format but in a proprietary format like i.e. offered by PuTTY.
Review the sections about creating a valid public/private key pair on your operating system: Setting up Gerrit (ssh)
A valid private key in OpenSSH format starts with the following lines:
-----BEGIN RSA PRIVATE KEY-----
Proc-Type: 4,ENCRYPTED
DEK-Info: DES-EDE3-CBC,0314A92F87D7FEDF
followed by about 25 lines of seemingly random signs.
Pushing old Patch Set again (updating/rebasing)
If you want to update an older patch set/version, so that it appears to be the current one, you always need to get an updated commit hash. So you cannot just checkout Patch Set 1 (or any other one) and perform a Git push. This would be refused with a "no new changes" error message.
So you need to amend the commit using:
git commit --amend
and then, even without modifying the Commit Message, it gets a new SHA. This commit can then be pushed again.
Resolving Merge Conflicts in generated asset files
If you cherry pick a patch for review, you might encounter a merge conflict with a generated asset file (JavaScript or CSS build files):
Mergeconflict in typo3/sysext/backend/Resources/Public/Css/backend.css
To resolve the conflict, do not try to resolve conflicts in a huge 1-line file, but instead re-create the assets using the following workflow:
# Perform re-build using the helper "runTests.sh"
# Make sure dependencies are up to date
./Build/Scripts/runTests.sh -s composerInstall
# Clean possibly previously build files
./Build/Scripts/runTests.sh -s clean
# Execute the build
./Build/Scripts/runTests.sh -s buildCss
./Build/Scripts/runTests.sh -s buildJavascript
# Now add all conflicting files as resolved:
git add typo3/sysext/backend/Resources/Public/Css/backend.css
# Continue the cherry-pick process
git cherry-pick --continue
You will see the Commit Message again and you can now save it. When you push this change, it will create a new Patchset - this is expected behavior.
In which TYPO3 release was a patch merged into?
See Information: Where was a patch included? for information on how to use the Included in menu button to see, in which TYPO3 releases a patch was merged into.