2009-12-31 10 views
15

Mi piacerebbe vedere come funziona TFS per il mio comando. Quindi mi piacerebbe spostare il nostro attuale repository GIT al database TFS. Abbiamo utilizzato GIT per il suo supporto di ramificazione prevalente, quindi mi piacerebbe utilizzare TFS 2010 per risolvere il problema.Git to TFS Source Control Migration

Ora la domanda è. Come esportare il nostro repo GIT in TFS. Ovviamente è una specie di sceneggiatura. Qualcuno l'ha fatto? Eventuali suggerimenti?

Grazie.

+17

Perché diavolo qualcuno si sposta da git a tfs? – hasen

+14

Due parole: migliore strumentazione. Lo so che git ha un sacco di hype. E lo stesso signor Torwalds ne ha scritto una parte, ma interagendo con questa cosa SUCCHIA. L'ho usato per 19 mesi, l'ho presentato alla squadra e non lo considero un proiettile d'argento. Tutti gli strumenti dell'interfaccia utente sono zoppi. L'interfaccia della riga di comando è dettagliata. Ho il set di script per supportare il mio flusso di lavoro, ma non è una soluzione di cui essere orgoglioso. Plus TFS è più del controllo della sorgente. È una soluzione complessa: bug tracker, sistema di compilazione, integrazione VS, sito SP per nessuno sviluppatori per osservare il processo e inviare bug, ecc. –

+0

Le estensioni di Git https://code.google.com/p/gitextensions/ stanno rapidamente facendo Il commento di Artem è obsoleto. Un'interfaccia utente molto più bella rispetto alle interfacce utente in bundle. –

risposta

9

Microsoft ha rilasciato il proprio GIT < -> estensione TFS per GIT: GIT-TF

Questo permette tirando un nuovo repository GIT da TFS o la configurazione per consentire GIT a TFS spinge, che è ciò che si vuole fare :

(dalla documentazione)

per una squadra che lavora con un repo Git esistente, uno sviluppatore di condivisione modifiche al TFS utilizzando Git-TF sarebbe utilizzare il seguente flusso di lavoro.

# Configure the existing repo's relationship with TFS 
git tf configure http://myserver:8080/tfs $/TeamProjectA/Main 

# Fetch the latest changes from TFS and merge those 
# changes with the local changes. 
# Note, merging is important when working in a team configuration. 
# See "Rebase vs. Merge" below. 
git tf pull 

git commit -a -m "merge commit" 

# Check in the merge commit as a single TFS changeset 
git tf checkin 

# Push the merge commit to the origin 
git push 

Inoltre, la soluzione open-source GIT-TFS preesistente può essere utilizzato (da solo Windows, la soluzione di Microsoft utilizza Java ed è cross-platform), descritto in una risposta a Git to TFS 2008 one way migration (with history)

+0

Questa soluzione funzionerà solo senza rami. Se si dispone di filiali, una soluzione migliore sarà utilizzare TFS2013 (Git) – Philippe

0

Potrebbe essere possibile esportare git in svn e utilizzare CS Converter per passare da svn a TFVS. Nota: CS Converter è stato interrotto, ma sembra che tu possa ancora scaricarlo.

2

Impostare un SVNBridge su TFS e quindi utilizzare git-svn clone.

+2

È git svn update ma hai ragione. Ho fatto esattamente questa cosa –

+0

Non vedo più un comando 'git svn update' in [Git docs] (http://git-scm.com/docs/git-svn), anche se ho trovato' git svn dcommit', che " Commit [s] ogni diff dal branch corrente direttamente al repository SVN, quindi rebase [s] o reset [s] (a seconda che esista o meno un diff tra SVN e head). Ciò creerà una revisione in SVN per ogni commit in git. " Quindi se questo dovrebbe essere la stessa cosa? –

5

ho creato un file batch veloce, ma è necessario disporre di Team Foundation Power Tools (tfpt.exe) nel vostro percorso e per (un comando di riga di comando loop)

visivo linea Studio di comando per la cartella desiderata git ed esegui quanto segue.

git log --pretty="'%%H',%%ci - %%s" --reverse > commits 

tf workspace temp /new /s:http://{TfsInstance} /i 
tf workfold /map %2 . /workspace:temp 

FOR /F "tokens=1* delims=','" %%a IN (commits) DO git checkout %%a && tfpt online /recursive /exclude:.git*,commits,*.obj,*.exe,_ReSharper*,obj,debug,*.user,*.suo,Bin /adds /deletes /i && tf checkin /author:"{AuthorName}" /comment:"%%b" /i 

tf workspace temp /delete /i 
  1. In primo luogo si crea un file impegna con tutte le informazioni impegnarsi in ordine inverso (dal meno recente).
  2. Poi si crea uno spazio di lavoro di Team Foundation ... (assicuratevi di sostituire {TtsInstance} con il TFS URI.
  3. Poi si crea una cartella temporanea nell'area di lavoro.
  4. Poi loop attraverso ogni riga nel file commit , fa un checkout da git, usa TFPT per archiviare i file correnti (di nuovo assicurati di sostituire {AuthorName} con il tuo nome dell'autore) il commento includerà il timestamp da git (purtroppo non puoi cambiare l'ora di registrazione senza cambiare il tempo del server TFS e lo consiglierei contro) e il nome dell'autore originale

T il suo ha funzionato bene, ma i rami non saranno perservati. Non ho avuto il tempo di capire la ramificazione visto che non era un fattore abbastanza grande per il lavoro in quel momento.

Speriamo che questo possa salvare qualcuno un po 'di tempo!

+0

Ho aggiunto 'Thumbs.db' all'elenco ** tfpt ** exclude. L'ho cancellato dalla cronologia git perché è stato accidentalmente aggiunto prima di aver incluso un file _.gitignore_ e ricevevo errori quando eseguivo il file '.bat'. –

-1

Questo è una vecchia domanda, e forse nessuno la sta cercando più, ma ora è molto più semplice.

  1. crea un progetto team in TFS con Git come il codice sorgente di controllo

  2. Afferra l'url Git per il progetto. Assomiglierà a qualcosa come ... https://YOURPROJECTS.visualstudio.com/DefaultCollection/_git/PROJECTNAME

  3. Passare al comando come ed eseguire.

    git add remota origine https://YOURPROJECTS.visualstudio.com/DefaultCollection/_git/PROJECTNAME

    -u git push --all origine

Dovrebbe essere tutto ciò che serve.

+0

Non veramente utile, poiché quando si utilizza GIT ospitato da TFS, non si ottiene il set completo di controlli che si avrebbero a disposizione come si farebbe con un progetto completo gestito da TFS. –

Problemi correlati