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