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

tracking many cvs/svn/git remote archives

From
Randal L. Schwartz <merlyn@stonehenge.com>
Date
Nov 20, 2006, 17:18 UTC
Message-ID
<86y7q6m3zm.fsf@blue.stonehenge.com>

Now that git-cvsimport and git-svn are mature, I'll share my script which I call "get.cvs" to track a number of remote archives. It's not extremely general, but maybe it'll inspire someone else to generalize it.

I have ~/MIRROR/foo-GITSVN tracking a remote archive using git-svn, so the name of the directory reflects the tracking mechanism. There's also *-CVS, *-SVN, *-GIT, and *-GITCVS.

For *-GITCVS, I have to keep the args for git-cvsimport around, so I store that in the respository under getcvs.gitcvsargs.

For *-GITSVN, I have to force the head/origin to softlink to the proper remote svn reference.

The *-GIT* merges are safe, because they won't pull over any uncommited entries, but they *will* merge into whatever the current branch is. This keeps any checked out tree trivially up to date, which is mostly what I'm watching anyway.

Setting up *-GIT* generally requires checking out a master branch to really track the files... I think I did this with "git-checkout -b master origin".

#!/bin/sh
cd && cd MIRROR || exit 1
case $# in
    0) set -- '*';;
esac
eval set -- "$@"
trap ':' 2
for i in "$@"
do (
        trap - 2
        cd $i || exit
        echo == $i ==
        case $i in
            *-CVS) cvs -q update;;
            *-SVN) svn update;;
            *-GIT*)
                ## first, update "origin":
                case $i in
                    *-GIT)
                        git-fetch
                        ;;
                    *-GITCVS)
                        git-cvsimport -k -i $(git-repo-config getcvs.gitcvsargs)
                        ;;
                    *-GITSVN)
                        ## be sure to have origin "ref: refs/remotes/git-svn"
                        git-svn multi-fetch
                        ;;
                esac
                if git-status | grep -v 'nothing to commit'
                then echo UPDATE SKIPPED
                else
                    if git-pull . origin | egrep -v 'up-to-date'
                    then
                        git log --no-merges ORIG_HEAD.. | git shortlog
                    fi
                fi
                ;;
            *)
                echo "[ignoring]";;
        esac
        )
done
-- 
Randal L. Schwartz - Stonehenge Consulting Services, Inc. - +1 503 777 0095
<merlyn@stonehenge.com> <URL:http://www.stonehenge.com/merlyn/>
Perl/Unix/security consulting, Technical writing, Comedy, etc. etc.
Next: Randal L. Schwartz
Message 1 of 6 in “tracking many cvs/svn/git remote archives”
  1. Randal L. SchwartzNov 20, 2006
  2. remotes/* for "foreign" archives (was Re: tracking many cvs/svn/git remote archives)Randal L. Schwartz, Nov 21, 2006
  3. Seth FalconNov 21, 2006
  4. Randal L. SchwartzNov 21, 2006
  5. Junio C HamanoNov 21, 2006
  6. Petr BaudisNov 21, 2006

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.