As of December 7th, 2010, the committers voted to move Fedora's source code repository to GitHub. This page exists to flesh out the details of the migration to GitHub, which is being tracked under FCREPO-835.
Contents:
Table of Contents |
---|
Scope
...
& Status
The following projects in the fedora-commons subversion repository on sourceforge.net will be moved:
Subversion Directory | GitHub Repository | Status |
---|---|---|
fedora | github.com/fcrepo/fcrepo | |
services/diringest | github.com/fcrepo/diringest | |
services/genericsearch | github.com/fcrepo/gsearch | |
services/oaiprovider | github.com/fcrepo/oaiprovider | |
services/sipcreator | github.com/fcrepo/sipcreator | |
utilities/ | github.com/fcrepo/migration-2to3 | |
* In order to make cloning and forking practical for the majority of contributors, the fcrepo repository will contain everything from the 3.3 release forward. The fcrepo-before33 repository will contain everything prior to 3.3. Instructions will be provided to locally graft the repositories for those who are interested in having the full view of history in a single repository.
...
The following steps were followed for the dry run migration of the fcrepo repository. Similar steps will be followed for the final migration of each repository (steps 4 and 5 -6 apply to the fcrepo repository only).
...
No Format |
---|
git tag -d NA1-0 2.2.4-patch1 release-2.2.4-patch1 |
Rename Install git-retag, then rename and sign original release tags using git convention (preserves original tag datesmetadata):
No Format |
---|
git tagretag fedora-f1-0 v1.0 git retag fedora-1-0 git tag -f 1 v1.1 git retag fedora-1-1 git tag -f1 v1.1.1 git retag fedora-1-1-1 git tag -f 2 v1.2 git retag fedora-1-2 git tag -f1 v1.2.1 git retag fedora-1-2-1 git tag -f0 v2.0 git retag fedora-2-0 git tag -f 1 v2.1 git retag fedora-2-1 git tag -f1 v2.1.1 git retag fedora-2-1-1 git tag -f1b v2.1b git retag fedora-2-1b git tag -f 2 v2.2 fedora-2-2 git tagretag release-f v22.2.1 release-2v2.2.1 git tagretag release-f v22.2.2 release-2v2.2.2 git tagretag release-f v22.2.3 release-2v2.2.3 git tagretag release-f v22.2.4 release-2v2.2.4 git tagretag release-f v33.0 release-3v3.0 git tagretag release-f v33.0b1 release-3v3.0b1 git tagretag release-f v33.0b2 release-3v3.0b2 git tagretag release-f v33.1 release-3v3.1 git tagretag release-f v33.2 release-3v3.2 git tagretag release-f v33.2.1 release-3v3.2.1 git tagretag release-f v33.3 release-3v3.3 git tagretag release-f v33.3.1 release-3v3.3.1 git tagretag release-f v33.4 release-3v3.4 git tagretag release-f v33.4-RC1 release-3v3.4-RC1 git tagretag release-f v33.4.1 release-3v3.4.1 |
Remove old, redundant tags:
No Format |
---|
git tag -d release-1.0 git tag -d `git tag|grep release`release-1.1 git tag -d release-1.1.1 git tag -d release-1.2 git tag -d release-1.2.1 git tag -d release-2.0 git tag -d release-2.1 git tag -d `gitrelease-2.1.1 git tag|grep fedora` -d release-2.1b git tag -d release-2.2 |
Remove old, unused branches (all branches but those specifically excluded below will be removed):
No Format |
---|
git branch -D `git branch | grep -v master \ | grep -v maintenance-3.4 | grep -v maintenance-2.2`2 \ | grep -v fcrepo-604 | grep -v fcrepo-644 \ | grep -v fcrepo-748 | grep -v fcrepo-756 \ | grep -v fcrepo-775 | grep -v fcrepo-579 \ | grep -v fcrepo-586` |
Free unused space in the repository:
No Format |
---|
git gc --prune=now
git prune |
Avoid 'local uncommitted change' errors later
No Format |
---|
git status |
4. Separate Recent History (fcrepo)
Use a copy of the result of the previous step:
No Format |
---|
cp -a 3.refs-cleaned 4.recent-history cd 4.recent-history |
Remove tags and branches prior to 3.3
No Format |
---|
git tag -d `git tag|grep -v 3.[34]`
git branch -D maintenance-2.2 fcrepo-579 fcrepo-586 |
Find the id of the 3.3 tagged commit and parent:
No Format |
---|
git log --since=2009-12-18 --until=2009-12-19export lastid=`git show v3.3|grep ^commit|sed 's/...... \(.*\)$/\1/'` export parentid=`git show $lastid^|grep ^commit|sed 's/...... \(.*\)$/\1/'` |
Filter out everything prior:
No Format |
---|
export lastid=86b96dec0108af8bc160b84f24276962e0c4e2d5
export parentid=100891ba5fd0f1d3869236047867462355e9f1b1
git filter-branch --parent-filter "sed -e 's/-p $parentid//'" \
--tag-name-filter cat -- --all ^$parentid
git for-each-ref --format='%(refname)' refs/original \
| while read ref; do git update-ref -d "$ref"; done |
Re-sign the tags:
No Format |
---|
git retag v3.3 v3.3 git retag v3.3.1 v3.3.1 git retag v3.4 v3.4 git retag v3.4-RC1 v3.4-RC1 git retag v3.4.1 v3.4.1 |
Reclaim unused space:
No Format |
---|
git reflog expire --expire=0 --all
git repack -ad
git prune |
Find the new id of the 3.3 tagged commit (now the root commit of this repository):
No Format |
---|
export lastid=`git show v3.3|grep ^commit|sed 's/...... \(.*\)$/\1/'` |
5. Separate Ancient History (fcrepo-before33)
Use a copy of the result of step 3:
...
No Format |
---|
git tag -d `git tag|grep 3.[34]` git branch -D `git branch | grep -v master \ |grep -v maintenance-3.42.2 | grep -v fcrepo-579 \ |grep -v fcrepo-586` git reset --hard (parent of lastid) git gc --prune=now git prune$parentid git gc --prune=now |
6. Graft Test
Use a copy of the result of step 4:
No Format |
---|
cp -a 4.recent-history 6.graft-test
cd 6.graft-test |
Copy the pack and index files from fcrepo-before33:
No Format |
---|
cp ../5.ancient-history/.git/objects/pack/* \
.git/objects/pack
|
Create the graft:
No Format |
---|
echo $lastid $parentid > .git/info/grafts |
Copy historic tags and branches:
No Format |
---|
cat ../5.ancient-history/.git/packed-refs >> .git/packed-refs |
Test it (all history, including old tags and branches, should be visible):
No Format |
---|
gitk --all |
7. Push to GitHub
After creating a project at GitHub:
No Format |
---|
git remote add origin git@github.com:fcrepo/projname.git
git push origin master
git push --all
git push --tags |