Da TFS a Git


14

Sono uno sviluppatore .NET e ho usato molte volte TFS (team foundation server) come software di controllo del codice sorgente. Le buone caratteristiche di TFS sono:

  1. Buona integrazione con Visual Studio (quindi faccio quasi tutto visivamente; nessun comando da console)
  2. Procedura di check-in e check-in facile
  3. Facile fusione e risoluzione dei conflitti
  4. Build automatizzate facili
  5. branching

Ora, voglio usare Git come backbone, repository e controllo del codice sorgente dei miei progetti open source. I miei progetti sono in linguaggio C #, JavaScript o PHP con database MySQL o SQL Server come meccanismo di archiviazione.

Ho appena usato l'aiuto di github.com per questo scopo e ho creato un profilo lì e scaricato una GUI per Git. Fino a questa parte è stato così facile.

Ma sono quasi bloccato per andare oltre. Voglio solo fare alcune semplici operazioni (molto semplici), tra cui:

  1. Creare un progetto su Git e mapparlo su una cartella sul mio laptop
  2. Checkout / check in file e cartelle
  3. Risolvere i conflitti

Questo è tutto ciò che devo fare ora. Ma sembra che la GUI non sia così facile da usare. Mi aspetto che la GUI abbia un Connect To...o qualcosa del genere, quindi mi aspetto che venga mostrato un elenco di progetti e quando lo scelgo, mi aspetto di vedere l'elenco di file e cartelle di quel progetto, proprio come esplorare il tuo progetto TFS in Visual Studio. Poi voglio essere in grado di fare clic destro su un file e selezionare check-in...o check-oute cose del genere.

Mi aspetto molto? Cosa devo fare per usare Git facilmente come TFS? Cosa mi sto perdendo qui?


8
Sono passato da SVN a git un anno fa e ne sono molto contento. NON consiglierei SVN a nessuno tranne che a un odiatore rigido della riga di comando. Una volta che impari Git, lo adorerai.
maaartinus,

14
Perché la gente di Windows è così ossessionata dalle interfacce grafiche?
tdammers,

8
@tdammers Perché la riga di comando su Windows fa schifo all'inferno? Lo so, c'è PowerShell, ma lo usano?
maaartinus,

3
@Saeed, per cominciare, ti aspetti che esista il check-in e il check-out dei file in git. Nessun VCS utilizzabile lo possiede da anni.
Daniel Roseman,

1
Letture consigliate: ericsink.com/entries/vcbe_print_edition_free.html Spiega le basi del controllo della versione e le differenze tra centralizzato e decentralizzato (che potrebbe ancora usare un server centrale, mente.)
Inca,

Risposte:


19

I vantaggi di Git sono derivati ​​dal lancio di molte vecchie ipotesi su cosa dovrebbe fare un VCS. Gli svantaggi che Git è derivato dal non essere in grado di sfruttare l'esperienza precedente e non essere in grado di fare le cose come siete abituati.

Se hai intenzione di passare da qualcos'altro a git, prova ad avviare tabula-rasa (anche se è impossibile farlo davvero in pratica). Valutalo in base a ciò che fa e quanto bene lo fa, non a come lo fa rispetto a come sei abituato a farlo. Non è che ti aspetti troppo, è che le tue aspettative sono ortogonali a ciò che fornisce Git. Se sei sposato con l'operazione della GUI, rimarrai deluso. Git ha strumenti di gui disponibili, ma non aggiungono molto. Non è un fallimento fornire loro tanto quanto non c'è molto che una GUI può aggiungere. GitK aiuta, non nelle operazioni quotidiane, ma piuttosto nella visualizzazione della struttura delle filiali e nell'esame o nella ricerca della cronologia.

Ecco un'analogia sciocca per ciò che intendo per "ortogonale". Una delle cose che puoi fare con un giornale è avvolgere il pesce o usarlo per rivestire una gabbia per uccelli. Ma quelli non sono essenziali per la funzione di un giornale, quelli sono le caratteristiche secondarie del modulo in cui si presenta. Aspettarsi che git "controlli i file" o "consenta di selezionare progetti" o fornisca un "collegamento a ... "è un po 'come aspettarsi di essere in grado di avvolgere i pesci o allineare la gabbia per uccelli con il sito Web di un giornale .


Spiacenti, ho dimenticato di spiegare la modifica. Ho appena aggiunto l'ultimo paragrafo dopo essermi alzato per prendere un altro caffè e avere l'analogia pop nella mia testa.
kylben,

3
Alla fine ho amato la metafora. +1
Yam Marcovic,

7

Hai considerato mercuriale? Come git, è un DCVS e ti consente di fare tutte le cose ordinate che si possono fare con un DCVS. Come git, esiste un buon fornitore di servizi basato su cloud (bitbucket). Ma, a differenza di Git, la storia di Windows è abbastanza decente, non sei un cittadino di seconda classe. Hai buone opzioni di strumenti (TortiseHG) e integrazione di Visual Studio (VisualHG) abbastanza decente.

Nulla sarà come TFS in Visual Studio: il mondo non è cablato in questo modo.


1
Concordo, qualche anno fa mi sono trasferito da VSS a Mercurial ed è stata una vera epifania. Improvvisamente ho potuto fare cose che non avrei mai pensato fossero pratiche. Poi mi sono trasferito svne ho perso molte cose che erano così facili da fare hg. Ora mi sto trasferendo gite ho sentimenti contrastanti. Adoro recuperare molte di quelle strutture in cui mi sono perso svn, ma mi manca ancora la semplicità hgrispetto alla complessità inutile di git. Anche solo installare TortoiseGit su Windows richiede di saltare attraverso i cerchi che semplicemente non sono necessari con TortoiseHg .
Mark Booth,

@Mark Booth: concordo sul fatto che git non è molto user-friendly, ma quale complessità inutile ? I problemi di installazione non contano, potrebbero essere attribuiti a TortoiseGit (che è un programma diverso) o a Windows.
maaartinus,

Sarebbe meglio sulla chat, ma non vedo alcuna necessità per l'area indice / cache / staging, IMHO il valore predefinito dovrebbe essere di impegnare tutto con l'opzione di commit parziali se richiesto (meglio sarebbe comunque accantonare le modifiche che don vuoi subito, riesegui i tuoi test unitari, esegui il commit e poi i dodici). Odio anche dover creare esplicitamente un nuovo ramo quando ne voglio uno. Con hg un ramo senza nome viene creato silenziosamente ogni volta che ti impegni con un non capo. In sostanza, se ti allontani da una testa senza ramificarti, potresti potenzialmente perderlo e poi raccogliere la spazzatura!
Mark Booth,

6

Sono passato da SVN a git un anno fa e ne sono molto contento. Tuttavia, non sto facendo affidamento su alcuna GUI e nel caso in cui rifiuti rigidamente la riga di comando, potrebbe essere un problema.

Sembra che ti aspetti gitdi lavorare come sei abituato, ma non funziona. Non è difficile, ma dovresti dare un'occhiata ai suoi principi prima di procedere.

Creare un progetto su Git e mapparlo su una cartella sul mio laptop

Git è distribuito, il che significa che lavori sempre con il tuo repository locale, che può essere associato a qualsiasi numero di telecomandi, incluso lo zero. Quando gioco con il progetto di un altro utilizzo due telecomandi: il loro repository git o SVN e il mio server.

Comincio sempre creando una directory vuota e poi o git inito git clone SOME-REMOTE-REPOSITORY. Questo link potrebbe aiutarti.

Checkout / check in file e cartelle

Ti sei perso di scrivere quale interfaccia grafica stai usando. Entrambi TortoiseGite git-guisicuramente possono farlo.

Risolvere i conflitti

Per questo sto usando il git-guimio editor di testo preferito.

Mi aspetto che la GUI abbia un Connect To ... o qualcosa del genere

Connettiti a cosa, quando possono esserci telecomandi da 0 a N? Git non rimane connesso a un server remoto, crea la connessione solo temporaneamente e solo per i pochi comandi che funzionano con il repository remoto. Gran parte del lavoro viene svolto localmente.

quindi mi aspetto che venga mostrato un elenco di progetti

Presumo che projectstu intenda repositories.

Temo che non ci sia nulla di simile. Git su un server remoto funziona rigorosamente con un solo repository. Elencare tutti i repository equivale a elencare tutte le directory che contengono la sottodirectory .git. Sono sicuro che ci sia qualcosa di simile GitHub.

Ne scelgo uno, mi aspetto di vedere l'elenco di file e cartelle di quel progetto, proprio come esplorare

Ancora una volta, temo che non ci sia nulla di simile, dal momento che gitfunziona localmente. E ancora, non sarebbe molto utile. Clona semplicemente il repository ed esploralo sul tuo computer. Mentre la clonazione di enormi repository richiede del tempo, tutte le operazioni successive sono molto più veloci e puoi esaminare qualsiasi commit o ramo.

Quindi voglio essere in grado di fare clic con il pulsante destro del mouse su un file e selezionare il check-in ... o il check-out e cose del genere.

Ancora una volta, gitfunziona localmente. Quindi non ha senso effettuare il check-in o il check-out su un repository remoto. Lavorare in questo modo è una perdita di tempo anche su una LAN veloce. Ottieni il repository sul tuo computer, lavora con esso e git pushle modifiche al telecomando. Pensaci come se stessi pubblicando le modifiche e facendo anche il backup. Dovresti impegnarti localmente molto spesso .

Prima di iniziare il lavoro git fetcho git pullle modifiche dal telecomando nel caso in cui qualcun altro abbia lavorato con esso.

Mi aspetto molto?

Sì e no. Ti aspetti qualcosa di diverso da ciò che offre. Puoi ottenere qualcosa di molto meglio, gitpotente, flessibile, sicuro, veloce come l'inferno e puoi fare tutto ciò di cui hai bisogno, ma non può imitare esattamente ciò che fa un VCS centralizzato.


5

Ho reso il viaggio da sorgente visiva sicuro a tfs a svn a git.

Passare da vss a tfs è stata un'esperienza piacevole. Passare da tfs a svn è stata un'esperienza piacevole. Passare da svn a git è stata una specie di battaglia interna.

Spesso mi trovo abbastanza conservatore e cerco di aggrapparmi a ciò che funziona. Per me è preferibile una bella gui rispetto alla riga di comando e mi sono ritrovato a cercare qualche gui che mi permettesse di giocare con i ragazzi fantastici con cui lavoro. Hanno usato esclusivamente git con la riga di comando.

Il momento eureka per me è arrivato quando ho rinunciato alla ricerca di una gui di proiettile d'argento e ho iniziato a provare git bash (sto ancora imparando).

Ho alcuni guit installati e completano git dalla riga di comando. Estensioni Git, provider di controllo del codice sorgente Git per visual studio e git tartaruga. Ma dico familiarizzare con Git Bash. I comandi possono essere un po 'criptici ma una volta imparati sono molto più veloci della GUI.

Ramificarsi con Git è semplicemente FANTASTICO rispetto agli altri. Crea rami e passa da un ramo all'altro quasi all'istante. Puoi fare cose che non ti preoccuperesti di fare con svn perché svn sostanzialmente copia la tua copia di lavoro (almeno nel modo in cui l'ho fatto).

Trovo che Git abbia una curva di apprendimento più ripida di svn. Ma una volta "capito" con Git non vuoi tornare indietro.

Vai fino in fondo.


5

Sei abituato ad avere un server che archivia i tuoi file e ne è il proprietario onnipotente. Per modificare un file è necessario richiedere l'autorizzazione dal server.

Git non è così. Pensa a git in questo modo: hai il tuo repository locale. Git consente di eseguire il commit di modifiche, commit inversi, diramazione semplice e rapida, ecc. Quando si desidera eseguire il backup della cronologia di controllo del codice sorgente, si inviano le modifiche a un altro repository, che "sembra essere" un server, come GitHub.com.

Flusso di lavoro:

  1. Clona (Download) / Crea repository
  2. Apporta alcune modifiche. Continua con lo sviluppo senza preoccuparti degli altri.
  3. Invia a un altro repository (potrebbe essere un server come GitHub).
  4. Quando si effettua il push in un repository, il proprietario dell'altro repository viene informato della push in sospeso e deve decidere se accettare tali commit, rifiutarli o prenderne solo un sottoinsieme.
  5. Il ciclo continua.

Questo è tutto.


1

Cosa intendi con "git gui"? Ce ne sono molti, incluso un plugin per l'integrazione di Visual Studio, se ricordo bene. Se una GUI non funziona per te, provane ancora finché non ne trovi una che funzioni. Personalmente utilizzo diverse GUI per compiti diversi (e l'interfaccia della riga di comando per altri).

Tuttavia, git è più un framework di controllo versione che un sistema fisso. Dovrai ancora imparare alcune nozioni di base per ottenere il massimo.


-2

Mi aspetto molto?

Cosa devo fare per usare Git facilmente come TFS?

Niente. Git è incentrato sulla CLI e non ha un buon frontend (conosco TortoiseGit, che non risponde, rispetto ad altri Tortoise *). Puoi provare a usare SmartGit (attenzione a Java)


1
-1: il controllo dei file in / out e la risoluzione dei conflitti non "si aspettano molto" dal controllo del codice sorgente.
Steven Evers,

2
+1 Controllarli direttamente da un server remoto non ha semplicemente senso. È solo per rallentare, anche su LAN. Fare queste cose è qualcosa a cui serve FTP, non VCS.
maaartinus

1
Il "check in / out" dei file non è un'operazione fondamentale per un VCS. È una funzionalità di implementazione comune alla maggior parte dei VCS e ha effetti collaterali sottili ma sfortunati.
kylben

2
@kylben: il check in / out è un modo per vedere il controllo della versione; la modifica e l'unione è un altro modo. Alcuni VCS utilizzano il precedente approccio, offrendo blocchi esclusivi e la possibilità di estrarre singoli file; altri prendono quest'ultimo, e con quelli, scarichi l'intero repository, apporti le tue modifiche locali e poi le rimandi al telecomando; il VCS si occupa della gestione delle modifiche in conflitto, chiedendo il tuo contributo in caso di dubbio. Nessuno dei due approcci è migliore, ma di solito non è possibile piegare un VCS in quello per cui non è stato creato.
tdammers,

1
"Effettuando il check-in / out", in realtà stavo parlando del modo in cui i VCS basati su blocco implementano le cose, non di come è possibile scaricare i file di origine per la modifica (che è davvero qualcosa che ogni VCS deve essere in grado di fare). Il fatto che molti VCS si riferiscano al semplice processo di download di un file come "checkout" è un po 'un termine errato IMO: nulla viene verificato e il repository non ricorda chi ha il file.
martedì
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.