Git export to CVS

Timmey92

Commodore
Registriert
Okt. 2008
Beiträge
4.570
Hallo,

ich habe ein Projekt, das mit git (Bitbucket Repo) verwaltet wird. Aus verschiedenen Gründen muss ich jetzt regelmäßig den aktuellen Stand in ein CVS Repository exportieren.
Wie kann man das anstellen (am liebsten automatisiert 1x pro Tag als cronjob auf meinem Linux Server). Ich habe diverse Skripte bei Google gefunden, aber zum laufen bekommen habe ich keines, da die Anleitungen in der Regel nicht mehr online waren, sondern nur noch der Code zu finden war.

Bsp.: https://code.google.com/p/vons-scri...sh?r=15bd143f2f90d6268b2388a48d67a9c87e488192

oder

Code:
#!/bin/sh


if [ $# -ne 2 ]
then
  echo "Usage: $0 <git dir source> <CVS dir destination>"
fi

# git source directory
GIT_DIR=`readlink -f $1`

# cvs target directory
CVS_DIR=`readlink -f $2`

# file to keep last successfully exported commit ID
LAST_EXPORT_FILE=.cvslastexport

# switch to git dir
cd $GIT_DIR

# Make sure we where called correctly.
CURRENT_GIT="$(git rev-parse --git-dir 2>/dev/null)" || exit 4 "** First argument must be a git repository **"

clean_up() {
  #cvs -d /srv/cvs/drupal up -C $GITSRV/$MODULE_BASE/$MODULE/ > /dev/null
  rm $CVS_DIR/.msg $CVSDIR/.cvsexportcommit.diff
  find $CVS_DIR -name '.#*' -exec rm '{}' \;
  echo "** CVS commit failed. Cleaning up cvs directory... **"
  exit 2
}

# pull
git pull -q
if [ $? -ne 0 ]
then
 echo "** git pull failed **"
 exit 1
fi

# get new commit IDs
if [ -f $LAST_EXPORT_FILE ]
then
  # get last exported commit ID
  LAST_EXPORTED=`cat $LAST_EXPORT_FILE`
  #echo "last exported: $LAST_EXPORTED"
  # get the new commits since the last export
  NEW_COMMITS=`git rev-list $LAST_EXPORTED..HEAD | tac`
else
  # no last export here, so let's export the complete history
  NEW_COMMITS=`git rev-list HEAD | tac`
fi
#echo "new commits: $NEW_COMMITS"
# loop for exporting each commit
for COMMIT in $NEW_COMMITS
do
  echo '** Exporting commit to CVS: **'
  git cvsexportcommit -kaucpw $CVS_DIR $COMMIT || clean_up
  # save successful exported commit to file
  echo $COMMIT > $LAST_EXPORT_FILE
done

Hatte schon mal jemand von euch diesen Fall?

Freue mich über eure Hilfe! :)
 
Es würde mehr Sinn machen das ganze über Git Hooks zu steuern.

Neuer Commit im Git > Aufruf des Hooks mit Export ins CVS

Ansonsten würde der Cronjob, obwohl nichts im Git gegenüber dem letzten Export geändert wurde, trotzdem durchlaufen.
 
Hm ok also wie und wann das Skript genau aufgerufen wird ist erst mal nebensächlich, hauptsache es funktioniert^^ muss auch nicht schön sein. Danke auf jeden Fall für den Hinweis. Geht mir genauer um die Vorgehensweise, wie man den Export auf die Reihe kriegt.
 
Was brauchst Du denn genau? Also wo ist der genaue Sinn dahinter? Warum Git zu CVS?

Brauchst du die komplette Git-Commit-History auch im CVS?
Oder reicht dir auch zb ein Export der HEAD Rev ins CVS?
 
Head Rev wäre ausreichend, die komplette History wäre natürlich sehr geil, wenn das ohne großen Mehraufwand geht.
 
Zurück
Oben