Flutter Engine
The Flutter Engine
|
The following must be executed within the Skia source repository.
This command sets up a Git commit-message hook to add a unique Change-Id to each commit. Gerrit only accepts changes with a Change-Id and uses it to identify which review a change applies to.
experimental/tools/set-change-id-hook
If you acquired Skia from a mirror (such as GitHub), you need to change the origin
remote to point to point to googlesource. Advanced uses will note that there is nothing special about the string origin
and that you could call this remote anything you want, as long as you use that name for get push
.
git remote set-url origin 'https://skia.googlesource.com/skia.git'
Go to skia.googlesource.com/new-password and follow the instructions.
git checkout -b TOPICYou may want to set a tracking branch at this time with:
git checkout -b TOPIC -t origin/main
echo FOO >> whitespace.txt git commit --all --message 'Change Foo' git log -1
git log
should show that a Change-Id line has been added you your commit message.Push to Gerrit
git push origin @:refs/for/main
@
is shorthand for HEAD
, introduced in git v1.8.5.
If you want to target a branch other than main
, that can be specified here, too. For example:
git push origin @:refs/for/chrome/m57
bin/sysopen https://skia-review.googlesource.com/c/skia/+/$(bin/gerrit-number @)
echo BAR >> whitespace.txt git commit --all --amendChanges to the commit message will be sent with the push as well.
git push origin @:refs/for/mainIf you want to set a comment message for this patch set, do this instead:
M=$(experimental/tools/gerrit_percent_encode 'This is the patch set comment message!') git push origin @:refs/for/main%m=$MThe title of this patch set will be "This is the patch set comment message!".
M=$(experimental/tools/gerrit_percent_encode 'This is the patch set comment message!') git push origin @:refs/for/main%l=Commit-Queue+1,m=$M
On your current branch, after uploading to gerrit:
git cl issue $(bin/gerrit-number @)
Now git cl try
and bin/try
will work correctly.
You may want to make git aliases for common tasks:
git config alias.gerrit-push 'push origin @:refs/for/main'
The following alias amends the head without editing the commit message:
git config alias.amend-head 'commit --all --amend --reuse-message=@'
Set the CL issue numnber:
git config alias.setcl '!git-cl issue $(bin/gerrit-number @)'
The following shell script will squash all commits on the current branch, assuming that the branch has an upstream topic branch.
squash_git_branch() { local MESSAGE="$(git log --format=%B ^@{upstream} @)" git reset --soft $(git merge-base @ @{upstream}) git commit -m "$MESSAGE" -e }
This shell script pushes to gerrit and adds a message to a patchset:
gerrit_push_with_message() { local REMOTE='origin' local REMOTE_BRANCH='main' local MESSAGE="$(echo $*|sed 's/[^A-Za-z0-9]/_/g')" git push "$REMOTE" "@:refs/for/${REMOTE_BRANCH}%m=${MESSAGE}" }
These shell scripts can be turned into Git aliases with a little hack:
git config alias.squash-branch '!M="$(git log --format=%B ^@{u} @)";git reset --soft $(git merge-base @ @{u});git commit -m "$M" -e' git config alias.gerrit-push-message '!f(){ git push origin @:refs/for/main%m=$(echo $*|sed "s/[^A-Za-z0-9]/_/g");};f'
If your branch's upstream branch (set with git branch --set-upstream-to=...
) is set, you can use that to automatically push to that branch:
gerrit_push_upstream() { local UPSTREAM_FULL="$(git rev-parse --symbolic-full-name @{upstream})" case "$UPSTREAM_FULL" in (refs/remotes/*);; (*) echo "Set your remote upstream branch."; return 2;; esac local UPSTREAM="${UPSTREAM_FULL#refs/remotes/}" local REMOTE="${UPSTREAM%%/*}" local REMOTE_BRANCH="${UPSTREAM#*/}" local MESSAGE="$(echo $*|sed 's/[^A-Za-z0-9]/_/g')" echo git push $REMOTE @:refs/for/${REMOTE_BRANCH}%m=${MESSAGE} git push "$REMOTE" "@:refs/for/${REMOTE_BRANCH}%m=${MESSAGE}" }
As a Git alias:
git config alias.gerrit-push '!f()(F="$(git rev-parse --symbolic-full-name @{u})";case "$F" in (refs/remotes/*);;(*)echo "Set your remote upstream branch.";return 2;;esac;U="${F#refs/remotes/}";R="${U%%/*}";B="${U#*/}";M="$(echo $*|sed 's/[^A-Za-z0-9]/_/g')";echo git push $R @:refs/for/${B}%m=$M;git push "$R" "@:refs/for/${B}%m=$M");f'