Domanda

Conosco il filo che dice che il rebase è per piccole modifiche dei compagni di squadra, mentre l'unione per grandi modifiche.

Conservo tre Git di tre compagni di squadra nella seguente struttura di directory dove abbiamo tutti lo stesso codice iniziale:

project 
      | - I
      | - myTeamMate1
      | - myTeamMate2

I rami non sono nello stesso Git.Ciò significa che non posso utilizzare rebase e unire.Ho usato vimdiff per sincronizzare le modifiche tra i teamMates.Tuttavia, questo richiede molto tempo.

Ho provato senza successo a creare la seguente struttura di directory in cui tutti i rami si trovano sotto un unico Git:

project
      | - I - myTeamMate1 - myTeamMate2

Tuttavia, eseguo il comando clone per me e per il mio compagno di squadra:

git clone <url>

e ricevo il messaggio di errore dopo aver eseguito il secondo clone per il mio compagno di squadra

fatal: destination path 'dotFiles' already exists and is not an empty directory.

Quale struttura di directory dovrei utilizzare con un team di 3 persone, tale che posso usarlo rebase E merge comandi?

È stato utile?

Soluzione

Solo qualche altro pensiero per completare la risposta di Samuel.

  • A differenza di SVN, rami e directory non sono completamente correlati in Git:avere 3 rami (uno per ogni membro del team) non significa 3 directory.Non è quello che intendevi nella tua domanda (dato che le tue directory sono in realtà 3 radici per 3 repository Git), ma preferisco menzionarlo esplicitamente per ogni evenienza;)

  • Essendo Git DVCS, i 3 repository possono essere ovunque (non in 3 directory sullo stesso computer).Se sono raggiungibili tramite un percorso UNC (\\desktop\path\to\repo), possono essere designati come remoti.

  • Idiota clone lo consente di ottenere riferimenti a filiali remote, ma non crea tracciamenti di filiali locali permettendoti di ottenere il lavoro dei tuoi colleghi.Il modulo rubino"filiali remote" può aiutare.

  • Essere diffidare del rebase mentre riscrive lo SHA-1 del tuo ramo (poiché riproduci i tuoi commit su un altro ramo):se i tuoi compagni di squadra hanno basato le loro fusioni sui tuoi rami, dovranno fondersi Tutto i tuoi commit ogni volta, anche quelli già accorpati!
    In questo caso è meglio avere 2 rami:

    • UN ramo lavorativo stai utilizzando per il tuo sviluppo e rebase (per integrare i lavori dei tuoi colleghi, sebbene anche questa operazione possa essere eseguita nel proprio ramo)
    • UN ramo pubblico editoriale, su cui unisci solo il tuo lavoro stabile e che può quindi essere utilizzato da altri repository remoti come fonte per le unioni.

Altri suggerimenti

Il fatto che non lo siano all'interno dello stesso git come dici tu non ti limita in alcun modo.Git è distribuito, il che significa che puoi recuperare tra questi repository, unire, rebase e così via.

Guarda a git remote --help per vedere come puoi nominare i repository dei tuoi compagni di squadra nei tuoi in modo che tu possa facilmente importare i loro cambiamenti, ribasare su di loro o eseguire si fonde.Non è necessario modificare la struttura delle directory, la tua è perfettamente utilizzabile.

Esempi di codice

Per tracciare un ramo remoto

git remote add -t master Hnr git://github.com/userName/files.git

Questo non ti scarica il ramo.Modifica semplicemente il file .git/config e aggiunge alcune righe che dicono a Git come, dove e come ottenere i dati in remoto.

Per ottenere il ramo del tuo compagno di squadra, corri

git fetch Hnr

Per vedere che hai davvero il ramo dei tuoi compagni di squadra, corri

git branch -a

o per vedere solo le filiali dei tuoi amici

git branch -r

I due comandi precedenti inizialmente hanno causato la mia confusione, poiché non li conoscevo.Questo mi ha fatto provare altri comandi non necessari per avere i rami per me.

2° modo per avere la filiale del tuo amico

Tuttavia, tieni presente che puoi utilizzare git-clone per avere il codice del tuo amico in una directory separata come segue

git clone UrlAtGithub

Quindi, apparentemente puoi utilizzare Git-remote come sopra per avere un ramo nel tuo repository Git:

git remote add master Hnr PATH/ToYourFriendRepo.git

Conclusione: Puoi utilizzare due modi per avere il ramo del tuo teamMate per te, tramite git-clone o senza di esso.Entrambi i modi richiedono l'uso di git remote add.Il vantaggio di quest'ultimo sembra essere che è necessario eseguire un comando in meno.Il primo poi ti dà di nuovo l'intero repository dei tuoi compagni di squadra sul tuo disco rigido.

Per favore, consulta i manuali di Git per come aggiornare i tuoi rami remoti. (NB il ramo remoto può essere sul tuo computer.Non è necessario che si trovi su un computer remoto.Anche la tua filiale può essere la filiale remota, ma ciò limita il tuo flusso di lavoro.)


Successivamente potresti voler unire il file specifico del tuo amico al tuo ramo.In tal caso, è sufficiente conoscere le prime 5 lettere dell'impegno del tuo amico per unire il file.

[Non sono sicuro di come sia possibile eseguire le seguenti operazioni:] Devi scappare, per esempio

git merge 76a32

Potresti ottenere il seguente output

CONFLICT (add/add): Merge conflict in shells/externalPrograms
Auto-merging shells/smallApps/extract
CONFLICT (add/add): Merge conflict in shells/smallApps/extract
Auto-merging shells/smallApps/extract~
CONFLICT (add/add): Merge conflict in shells/smallApps/extract~
Automatic merge failed; fix conflicts and then commit the result.

In tal caso, i tuoi file differiscono in modo significativo da quelli del tuo amico e Git non può decidere quale file prendere.Apparentemente è necessario eseguire quanto segue

git rebase

e ottieni

shells/smallApps/extract: needs merge
shells/smallApps/extract~: needs merge
cannot rebase: you have unstaged changes

Esercizio 1 : Tuttavia, ora sono bloccato, poiché il mio tig non mostra il commit del mio amico nel mio albero Git.Come puoi ottenere il commit 76a32 del tuo amico sul tuo albero Git quale ramo è nel tuo Git?


Ora potresti aver risolto il problema.Il problema era che li ignoravo per risolvere i conflitti sui quali Git mi dava notifiche.Google salva ancora una volta la situazione sito ufficiale Git:

Se ci sono conflitti-per esempio, se lo stesso file viene modificato in due modi diversi nella filiale remota e nella filiale locale-poi sei avvertito-

Il problema successivo è ripulire le parti problematiche e unirle nuovamente.Vedi qualcosa di simile al seguente nei tuoi file problematici: divertiti!(Finalmente arrivo ai problemi veri ;)

testo alternativo http://dl.getdropbox.com/u/175564/exampleGitProblemSolving.png


Problema nella differenza e nell'unione di dotFiles nel FileMerge del Mac

Avevo bisogno di aggiornare il mio Git, poiché solo il Git più recente ha difftool -command.Puoi trovare una soluzione su filo.

Difftool ti consente di avviare dotFiles in FileMerge dal terminale.Non è possibile accedervi dalla GUI.Funziona come

git difftool master:README dev:README

Problema con il tuo account in Github dopo aver aggiunto un nuovo account remoto

Il tuo account Github potrebbe essere scomparso in .git/config.In tal caso, è necessario eseguire il seguente codice

git remote add -f YourUserName UrlIn@form.git

Potresti quindi notare che non puoi eseguire normalmente git-push

git push origin master

Potresti ricevere il seguente messaggio di errore

fatal: 'origin' does not appear to be a git repository
fatal: The remote end hung up unexpectedly

Puoi anche provare i seguenti comandi per risolvere il problema

git push Masi master

e tutte e 3 le permutazioni sotto 2 di Masi, maestro e origine.Tuttavia, nessuno dei comandi ha funzionato.

Esercizio 2: Come puoi impegnarti nel tuo account Github poiché hai un teamMate nella tua lista remota?

Origin è un nome abbreviato per il tuo vero repository git esterno, ad esempio su Github.Il contenuto della tua variabile origin potrebbe essere stato sostituito da un altro repository remoto.In questo caso, ti consiglio di creare una nuova variabile tramite

git remote add github git@github.com:myLogin/myProject.git

Nota che potresti avere origin2 al posto di github.L'origine è solo una convenzione nel nominare il repository.

Puoi quindi semplicemente correre

git push github master

Potresti avere una passphrase nella tua chiave ssh.Se lo hai, potresti ricevere un'autorizzazione negata -avviso.Se lo hai fatto, consulta il filo.

A dire il vero, ho iniziato a lavorare scrivendo una risposta bella, lunga e dettagliata...ma questo è già spiegato molto meglio di quanto potrei fare http://excess.org/article/2008/07/ogre-git-tutorial/.Copre l'uso di diversi rami, remoti e fusioni.È possibile farlo anche tramite screencast, quindi prenditi un'ora, prendi un caffè e goditi la lezione.

Specifico per la tua domanda:non dovresti usare una configurazione di directory.Git non gestisce i rami con le directory nello stesso modo in cui SVN gestisce le cartelle dei rami.I rami in Git sono una cosa completamente diversa.Anche se potresti non impostare un repository centrale (lo consiglio), dovresti impostarne uno singolo maestro ramo a cui tutti affidano il loro lavoro finale e pulito.

Un mio repository di esempio ha uno screenshot su Wikimedia Commons.Nel mio esempio, "barista" invia il suo codice solo in blocchi tar, quindi devo importarlo io stesso per gestirlo."master" (mostrato qui solo come remotes/elf/master) è un repository svn pubblico da cui importo e baso le modifiche."autocrazia" è la mia base di riferimento per il codice e "privato" è dove tengo un file di configurazione con le password che voglio gestire ma che non pubblico mai.Controlla il timestamp in privato e noterai che non si allineano con i rami sottostanti.Questo perché lo ribaso si diramano verso l'"autocrazia" invece di fondersi.

Noterai due riferimenti remoti: elfo e bardo.Queste sono due mie macchine remote che ospitano il software.Posso spingere e tirare i miei rami lì come desidero.Nel tuo caso, avresti repository remoti degli altri tuoi sviluppatori e loro modificherebbero i propri rami.Guardando il tutorial avrai un'idea migliore di come funziona.Buona fortuna :)

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top