blog post on git-buildpackage and debian-only layouts
authorStefano Zacchiroli <zack@upsilon.cc>
Wed, 19 Mar 2008 15:49:52 +0000 (16:49 +0100)
committerStefano Zacchiroli <zack@upsilon.cc>
Wed, 19 Mar 2008 15:49:52 +0000 (16:49 +0100)
blog/posts/2008/03/git-buildpackage_from_debian-only_to_debian+upstream.mdwn [new file with mode: 0644]
tags/git.mdwn [new file with mode: 0644]

diff --git a/blog/posts/2008/03/git-buildpackage_from_debian-only_to_debian+upstream.mdwn b/blog/posts/2008/03/git-buildpackage_from_debian-only_to_debian+upstream.mdwn
new file mode 100644 (file)
index 0000000..c02bcfd
--- /dev/null
@@ -0,0 +1,51 @@
+# Moving a git layout from debian-only to debian+upstream
+## ... and live happily with git-buildpackage
+
+Let's say you have a [git](http://git.or.cz) repository you have used thus far
+to maintain only the Debian part of some package (i.e. no upstream sources on
+sight).
+
+<small>OK, you're right, that would be quite an uncommon scenario for a git
+repository. In fact the truth is that you are in such a situation because the
+git repo was obtained converting from a subversion repo which was using the
+<tt>mergeWithUpstream</tt> stuff of [[debpkg svn-buildpackage]].</small>
+
+Now that you have git's space efficiency you want to change this, import
+upstream sources, and possibly adhere to a branch layout which is compatible
+with [[debpkg git-buildpackage]] (which is very simple in its minimal
+requirements: an <q>upstream</q> branch containing just upstream sources and a
+<q>master</q> branch containing a debianized source tree).
+
+Out of the box <kbd>git-import-orig</kbd> won't work since don't have the
+upstream branch. Creating it branching from master (or somewhere else) won't
+work either unfortunately. Indeed after branching you will need to remove the
+<tt>debian/</tt> dir from upstream and when you will merge upstream with master
+you will be merging the removal as well, bad idea.
+
+<small>By myself I've found some horrifying solutions involving using
+<kbd>git-filter-branch</kbd> on the upstream branch merged from master and then
+squashing all the history of that branch with <kbd>git-rebase</kbd>, but they
+are so horrible that I won't mention them here more than this.</small>
+
+The nice solution came from a hint by madduck on the [creation of branches
+without
+ancestry](http://madduck.net/blog/2007.07.11:creating-a-git-branch-without-ancestry/).
+Here is the complete recipe (assumed to be run from the master branch of the
+repo, before creating any upstream branch):
+
+    $ git-symbolic-ref HEAD refs/heads/upstream
+    $ git rm --cached -r .
+    $ git commit --allow-empty -m 'initial upstream branch'
+    $ git checkout -f master
+    $ git merge upstream
+    $ git-import-orig --no-dch ../foo_1.2.3.orig.tar.gz
+
+In short: you should create an [upstream branch without any
+ancestry](http://madduck.net/blog/2007.07.11:creating-a-git-branch-without-ancestry/),
+in it you should create an empty commit, then merge it (vacuously) in master,
+and now you're ready to call <kbd>git-import-orig</kbd> to the rescue.
+
+Feature request on [[debpkg git-buildpackage]] to support this out of the box is
+on the go: [[debbug 471560]].
+
+[[tag lang/english planet/debian vcs git debian]]
diff --git a/tags/git.mdwn b/tags/git.mdwn
new file mode 100644 (file)
index 0000000..b14a63f
--- /dev/null
@@ -0,0 +1,3 @@
+Stuff related to the [Git](http://git.or.cz/) [Version Control
+System](http://en.wikipedia.org/wiki/Version_control_system).
+[[template id=tag_feeds name="git"]]