mirror of
				https://github.com/tmux/tmux.git
				synced 2025-11-04 00:56:10 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			176 lines
		
	
	
		
			5.7 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			176 lines
		
	
	
		
			5.7 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
Preamble
 | 
						|
========
 | 
						|
 | 
						|
Tmux on SourceForge has two git repositories [1] "tmux" and "tmux-openbsd".
 | 
						|
Here's a description of them:
 | 
						|
 | 
						|
* "tmux" is the portable version, the one which contains code for other
 | 
						|
  operating systems, and autotools, etc., which isn't found or needed in the
 | 
						|
  OpenBSD base system.
 | 
						|
 | 
						|
* "tmux-openbsd" is the version of tmux in OpenBSD base system which provides
 | 
						|
  the basis of the portable tmux version.
 | 
						|
 | 
						|
Note:  The "tmux-openbsd" repository is actually handled by "git cvsimport"
 | 
						|
running at 15 minute intervals, so a commit made to OpenBSD's tmux CVS
 | 
						|
repository will take that long to appear in this git repository.
 | 
						|
 | 
						|
It is assumed that the person doing the sync has read/write access to the
 | 
						|
tmux repository on SourceForge already.
 | 
						|
 | 
						|
If you've never used git before, git tracks meta-data about the committer
 | 
						|
and the author, as part of a commit, hence:
 | 
						|
 | 
						|
% git config [--global] user.name "Your name"
 | 
						|
% git config [--global] user.email "you@yourdomain.com"
 | 
						|
 | 
						|
Note that, if you already have this in the global ~/.gitconfig option, then
 | 
						|
this will be used.  Setting this per-repository would involve not using the
 | 
						|
"--global" flag above.   If you wish to use the same credentials always,
 | 
						|
pass the "--global" option, as shown.
 | 
						|
 | 
						|
This is a one-off operation once the repository has been cloned, assuming
 | 
						|
this information has ever been set before.
 | 
						|
 | 
						|
Cloning repositories
 | 
						|
====================
 | 
						|
 | 
						|
This involves having both tmux and tmux-openbsd cloned, as in:
 | 
						|
 | 
						|
% cd /some/where/useful
 | 
						|
% git clone ssh://${USER}@tmux.git.sf.net/gitroot/tmux/tmux
 | 
						|
% git clone ssh://${USER}@tmux.git.sf.net/gitroot/tmux/tmux-openbsd
 | 
						|
 | 
						|
Note that you do not need additoinal checkouts to manage the sync -- an
 | 
						|
existing clone of either repositories will suffice.  So if you already have
 | 
						|
these checkouts existing, skip that.
 | 
						|
 | 
						|
Adding in git-remotes
 | 
						|
=====================
 | 
						|
 | 
						|
Because the portable "tmux" git repository and the "tmux-openbsd" repository do
 | 
						|
not inherently share any history between each other, the history has been
 | 
						|
faked between them.  This "faking of history" is something which has to be
 | 
						|
told to git for the purposes of comparing the "tmux" and "tmux-openbsd"
 | 
						|
repositories for syncing.  To do this, we must reference the clone of the
 | 
						|
"tmux-openbsd" repository from the "tmux" repository, as shown by the
 | 
						|
following command:
 | 
						|
 | 
						|
% cd /path/to/tmux
 | 
						|
% git remote add obsd-tmux file:///path/to/tmux-openbsd
 | 
						|
 | 
						|
So that now, the remote "obsd-tmux" can be used to reference branches and
 | 
						|
commits from the "tmux-openbsd" repository, but from the context of the
 | 
						|
portable "tmux" repository, which makes sense because it's the "tmux"
 | 
						|
repository which will have the updates applied to them.
 | 
						|
 | 
						|
Fetching updates
 | 
						|
================
 | 
						|
 | 
						|
To ensure the latest commits from "tmux-openbsd" can be found from within
 | 
						|
"tmux", we have to ensure the "master" branch from "tmux-openbsd" is
 | 
						|
up-to-date first, and then reference that update in "tmux", as in:
 | 
						|
 | 
						|
% cd /path/to/tmux-openbsd
 | 
						|
% git checkout master
 | 
						|
% git pull
 | 
						|
 | 
						|
Then back in "tmux":
 | 
						|
 | 
						|
% cd /path/to/tmux
 | 
						|
% git fetch obsd-tmux
 | 
						|
 | 
						|
Creating the necessary branches
 | 
						|
===============================
 | 
						|
 | 
						|
Now that "tmux" can see commits and branches from "tmux-openbsd" by way of
 | 
						|
the remote name "obsd-tmux", we can now create the master branch from
 | 
						|
"tmux-openbsd" in the "tmux" repository:
 | 
						|
 | 
						|
% git checkout -b obsd-master obsd-tmux/master
 | 
						|
 | 
						|
Adding in the fake history points
 | 
						|
================================= 
 | 
						|
 | 
						|
To tie both the "master" branch from "tmux" and the "obsd-master" branch
 | 
						|
from "tmux-openbsd" together, the fake history points added to the "tmux"
 | 
						|
repository need to be added.  To do this, we must add an additional refspec
 | 
						|
line, as in:
 | 
						|
 | 
						|
% cd /path/to/tmux
 | 
						|
% git config --add remote.origin.fetch '+refs/replace/*:refs/replace/*'
 | 
						|
% git fetch origin
 | 
						|
 | 
						|
Performing the Sync
 | 
						|
===================
 | 
						|
 | 
						|
Make sure the "master" branch is checked out:
 | 
						|
 | 
						|
% git checkout master
 | 
						|
 | 
						|
The following will show commits on OpenBSD not yet synched with tmux
 | 
						|
portable:
 | 
						|
 | 
						|
% git log master..obsd-master
 | 
						|
 | 
						|
From there, the merge should be a fast-forward, using the OURS strategy to
 | 
						|
tell git that conflicts coming from OpenBSD respect the existing code in
 | 
						|
tmux where those conflicts wouldn't arise.  Hence:
 | 
						|
 | 
						|
% git merge -s ours obsd-master
 | 
						|
 | 
						|
Then ensure things look correct by BULDING the result of that sync:
 | 
						|
 | 
						|
% make clean && ./autogen.sh && ./configure && make
 | 
						|
 | 
						|
Compare the git merge result with what's on origin/master -- that is, check
 | 
						|
which commits you're about to push:
 | 
						|
 | 
						|
% git log origin/master..master
 | 
						|
 | 
						|
And if happy:
 | 
						|
 | 
						|
% git push origin master
 | 
						|
 | 
						|
Release tmux for next version
 | 
						|
=============================
 | 
						|
 | 
						|
1. Comment the "found_debug=yes" line in configure.ac, since releases
 | 
						|
   don't have debugging enabled, otherwise make(1) aborts when
 | 
						|
   preparing the distribution.
 | 
						|
 | 
						|
2. Update and commit NOTES and CHANGES.  The former should be checked for
 | 
						|
   anything outdated and updated with a list of things that might break
 | 
						|
   upgrades and the latter should mention all the major changes since
 | 
						|
   the last version.
 | 
						|
 | 
						|
3. Tag with:
 | 
						|
 | 
						|
   % git tag -a 1.X
 | 
						|
 | 
						|
   Where "1.X" is the next version.
 | 
						|
 | 
						|
   Push the tag out with:
 | 
						|
 | 
						|
   % git push --tags
 | 
						|
 | 
						|
4. Build the tarball with make dist.  Now that it's using autoconf there
 | 
						|
   shouldn't be any weird files (such as the original and rejection files
 | 
						|
   from patch(1)) but it doesn't hurt taking a quick look at it.
 | 
						|
 | 
						|
5. Split the release changes into a new file.  This should be named
 | 
						|
   tmux-$VERSION-readme to make sourceforge show it automagically in specific
 | 
						|
   parts of the project page.
 | 
						|
 | 
						|
6. Upload the tarball and the above file. Make the tarball the default
 | 
						|
   download by selecting all operating systems under the file details.
 | 
						|
 | 
						|
7. Run make update-index.html upload-index.html to replace %%VERSION%%.
 | 
						|
 | 
						|
8. Bump version in configure.ac and uncomment "found_debug=yes" to create
 | 
						|
   a debug build by default.
 | 
						|
 | 
						|
9. Update freshmeat.
 | 
						|
 | 
						|
[1] http://tmux.git.sourceforge.net/git/gitweb-index.cgi
 |