svn commit: r335350 - head/tools/tools/git
Warner Losh
imp at FreeBSD.org
Tue Jun 19 00:27:31 UTC 2018
Author: imp
Date: Tue Jun 19 00:27:30 2018
New Revision: 335350
URL: https://svnweb.freebsd.org/changeset/base/335350
Log:
Add my script for coping with git-svn and the need to rebase
changes for different branches. It's a bit rough right now,
but should be good enough for most people to try to use. It's
definitely 'tools' tree quality.
Added:
head/tools/tools/git/git-svn-rebase (contents, props changed)
Modified:
head/tools/tools/git/HOWTO
Modified: head/tools/tools/git/HOWTO
==============================================================================
--- head/tools/tools/git/HOWTO Mon Jun 18 23:16:47 2018 (r335349)
+++ head/tools/tools/git/HOWTO Tue Jun 19 00:27:30 2018 (r335350)
@@ -142,3 +142,18 @@ and 5, the commit hashes of all of your commits change
You must go back and find the new commit hashes of your commits to pass to
importgit. Passing -r C1~..C2 would import your commits as they were *before*
your code review fixes were applied.
+
+III. git-svn-rebase
+
+git-svn-rebase is a script that helps you keep current when using git
+plus subversion as outline in https://wiki.freebsd.org/GitWorkflow/GitSvn
+since it's otherwise a pain to have many branhes active. It will rebase
+those branches that haven't been merged yet. Some tweaking may be needed
+if you have other, weird branches in your tree (including any stable
+branches). To run it just cd into the git subversion tree somewhere and
+type
+ $ git-svn-rebase
+and it will do its thing and leave the tree on the master branch.
+
+Your tree must be clean to start this, and while it tries to catch
+some failures, not all of them have been allowed for.
Added: head/tools/tools/git/git-svn-rebase
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ head/tools/tools/git/git-svn-rebase Tue Jun 19 00:27:30 2018 (r335350)
@@ -0,0 +1,57 @@
+#!/bin/sh
+
+# $FreeBSD$
+
+# SPDX-License-Identifier: BSD-2-Clause-FreeBSD
+#
+# Copyright (c) 2018 M. Warner Losh
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+# ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+# SUCH DAMAGE.
+
+#
+# simple script to keep all my branches up to date while tracking
+# FreeBSD (or any upstream svn source) with git. Run it often, and it
+# will rebase all the branches so they don't get too stale.
+# Takes no args, and acts goofy if you have really old branches
+# which is why stable/* and mfc* are excluded. Caution to should be taken
+# when using this.
+#
+
+FAIL=
+echo ----------------- Checkout master for svn rebase ------------
+git checkout master
+echo ----------------- Rebasing our master to svn upstream ------------
+git svn rebase
+for i in $(git branch --no-merge | grep -v stable/ | grep -v mfc); do
+ echo ----------------- Rebasing $i to the tip of master ------------
+ git rebase master $i || {
+ echo "****************** REBASE OF $i FAILED, ABORTING *****************"
+ FAIL="$FAIL $i"
+ git rebase --abort
+ }
+done
+echo ----------------- Checkout out master again ------------
+git checkout master
+git branch
+if [ -n "$FAIL" ]; then
+ echo Failed branches: $FAIL
+fi
More information about the svn-src-all
mailing list