git/list[1] front-page[2] threads[3] people[4] search[5] about
 

Re: Idea: "live branches"?

From
Johannes Schindelin <johannes.schindelin@gmx.de>
Date
Jul 9, 2008, 17:00 UTC
Message-ID
<alpine.DEB.1.00.0807091750350.18205@racer>
In-Reply-To
<m28wwbz8h7.fsf@tnuctip.rychter.com>
Hi,
On Wed, 9 Jul 2008, Jan Rychter wrote:
Show 14 quoted lines
> Which brings me to my point. I think we need a system that can maintain 
> "live branches". We already have impressive systems for dealing with 
> patches and we have made the patch into a first-class citizen of our 
> software development world. Now, instead of statically tracking commits 
> and following a one-way development history, let's have live branches -- 
> branches that can change, causing code that depends on them to change.
> 
> The way this would work is I would have one or two long-term development 
> branches, and each of those would depend on a list of "live branches", 
> managed by a tool similar to StGIT. I should be able to commit to either 
> the main development branch, or to one of the "live branches", in which 
> case I should be able to easily "resync" the main development branch (do 
> a merge or a rebase, but I would prefer the tool to first remove old 
> merge commits, so as not to clutter history).

It should be very easy to write a small shell script which expects some config variable

	branch.<currentBranchName>.liveBranches

which contains a list of (local) branches. It would then just look which of those branches contains newer commits, finds the merges that pulled those branches in, and redoes those merges (and the commits). It would rely heavily on "git reset" and on an untampered-with merge message.

The main loop would look a little bit like this:
	git rev-list --parents <first-merge-to-be-replaced>^ |
	while read commit parent otherparents
	do
		case "$otherparents" in
		'')
			git cherry-pick $commit
		;;
		*)
			case " $commit " in
			" $mergestoberedone ")
			;;
			*)
				message="$(git cat-file commit $commit |
					sed '/^$/q')"
				git merge -m "$message" $otherparents
			;;
		esac
	done
	# merge changes branches
No wizardry required.
> The tool should also let me pick a commit I've made and move it to one 
> of the live branches easily (similar to stgit).

That is relatively simple, using "git checkout <branch> && git cherry-pick <commit> && git checkout <formerBranch> && git resync-live-branches".

I strongly suggest writing that script, and seeing if it is useful for you. If it is, just submit it and earn all the glory.

Hth, Dscho

Previous: Avery Pennarun
Message 3 of 3 in “Idea: "live branches"?”
  1. Jan RychterJul 9, 2008
  2. Avery PennarunJul 9, 2008
  3. Johannes SchindelinJul 9, 2008

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.