Domanda

Ho già un repository di sola lettura svn estratto (svn co e non git svn). Ho apportato alcune modifiche e mi impegno a utilizzare git che viene quindi trasferito su github.

A questo punto, git non ha tutta la cronologia di svn. Mi chiedevo se ci fosse un modo per estrarre e importare questo a questo punto.

Le varie guide di git-svn mostrano come importare un repository pulito e trasferire la cronologia ma non quella che trovo già in uso.

È stato utile?

Soluzione

Probabilmente dovrai eseguire un'importazione svn in un nuovo repository git, unire i due repository (basta aggiungerli insieme, probabilmente si lamenterà che non sono correlati) e quindi rebase le modifiche apportate alla cronologia importata.

Altri suggerimenti

Per completare Thilo di buona risposta , una volta importato il repository svn in uno git, tu può aggiungere quel repository git al tuo con uno script come descritto in fusione in rami git non correlati

#!/bin/bash

set -e

if test -z "$2" -o -n "$3"; then
    echo "usage: <*> REPO BRANCHNAME" >&2
    exit 1
fi

repo=$1
branch=$2

git fetch "$repo" "$branch"

head=$(git rev-parse HEAD)
fetched=$(git rev-parse FETCH_HEAD)
headref=$(git rev-parse --symbolic-full-name HEAD)

git checkout $fetched .

tree=$(git write-tree)

newhead=$(echo "merged in branch '$branch' from $repo" | git commit-tree $tree -p $head -p $fetched)
git-update-ref $headref $newhead $head
git reset --hard $headref

Altri metodi includono:

  • prova un " semplice " git pull REPO BRANCH
  • utilizzando git innesti per ripristinare la cronologia di svn merge creando un file di testo in .git / info / innesti, dove ogni riga contiene un ID di commit seguito dai suoi genitori. D'ora in poi il tuo repository locale agirà come se quell'impegno discendesse effettivamente da entrambi i genitori.
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top