Iniziamo con il repository Git. Creeremo una cartella chiamata progetto.git e inizializzalo per diventare il repository remoto:
$ mkdir progetto.idiota$ progetto cd.idiota/
$ git init --bare
Repository Git vuoto inizializzato in /Users/zakh_eecs/_work/LearnGIT/git_remote_repository/
progetto.idiota/
Ora vai in una nuova posizione in cui puoi creare una cartella pulita. Crea la cartella project_source e inizializzala per Git:
$ mkdir project_source$ cd sorgente_progetto
$ git init
Repository Git vuoto inizializzato in /Users/zakh_eecs/_work/LearnGIT/git_branching_source/
sorgente_progetto/.idiota/
$ tocca Leggimi.TXT
$ git add -A
$ git commit -m "Commit iniziale"
[master (root-commit) 176134f] commit iniziale
1 file modificato, 0 inserimenti(+), 0 eliminazioni(-)
crea modalità 100644 Leggimi.TXT
Il project_setup è una directory Git con ReadMe.file txt. Tuttavia, non è connesso al nostro repository remoto. Impostiamo il progetto.git come repository remoto per project_source. Possiamo ottenere ciò tramite il seguente comando:
$ git remote add origin /Users/zakh_eecs/_work/LearnGIT/git_remote_repository/project.idiota$ git push origine master
Conteggio oggetti: 3, fatto.
Oggetti in scrittura: 100% (3/3), 213 byte | 0 byte/s, fatto.
Totale 3 (delta 0), riutilizzato 0 (delta 0)
A /Users/zakh_eecs/_work/LearnGIT/git_remote_repository/project.idiota
* [nuovo ramo] master -> master
Con il comando git remote add origin, abbiamo creato la connessione tra progetto.git e project_source. Con il comando git push origin master, abbiamo inviato il nostro ramo master al repository remoto.
Controlliamo i nostri rami (sempre nella cartella project_source):
$ git branch* maestro
$ git branch -r
origine/maestro
$ git ramo -a
* maestro
telecomandi/origine/master
Il primo comando mostra solo il ramo locale. L'opzione -r mostra il ramo remoto. E l'opzione -a mostra sia locale che remoto.
Creiamo alcuni rami nella nostra directory di lavoro:
Sviluppo del ramo $ git$ git branch hotfix
$ git branch sperimentale
$ git ramo -a
sviluppo
sperimentale
aggiornamento rapido
* maestro
telecomandi/origine/master
Abbiamo creato branch chiamati sviluppo, hotfix e sperimentale. Stanno comparendo nella nostra lista di filiali locali. Ma nei telecomandi/origine, c'è solo il ramo principale perché è l'unico che abbiamo spinto. Il master star(*) significa che siamo ancora nel ramo master locale. Entriamo nel ramo di sviluppo, eseguiamo il commit delle modifiche e inseriamo tali modifiche nel repository remoto.
$ git checkout sviluppoPassato al ramo "sviluppo"
$ echo abc > Leggimi.TXT
$ git add -A
$ git commit -m "Ramo di sviluppo modificato"
[sviluppo dd9933e] Ramo di sviluppo modificato
1 file modificato, 1 inserimento(+)
$ git push origin sviluppo
Conteggio oggetti: 3, fatto.
Scrittura di oggetti: 100% (3/3), 257 byte | 0 byte/s, fatto.
Totale 3 (delta 0), riutilizzato 0 (delta 0)
A /Users/zakh_eecs/_work/LearnGIT/git_remote_repository/project.idiota
* [nuovo ramo] sviluppo -> sviluppo
Controlliamo ora tutti i rami:
$ git ramo -a* sviluppo
sperimentale
aggiornamento rapido
maestro
telecomandi/origine/sviluppo
telecomandi/origine/master
Vediamo che siamo nel ramo dello sviluppo locale, ma c'è anche un ramo dello sviluppo remoto. Quando abbiamo inviato le nostre modifiche con git push origin development, è stato creato il ramo di sviluppo in remotes/origin.
Ora usciamo da project_source e troviamo un nuovo posto dove possiamo avere una nuova cartella. Qui andremo a clonare il repository remoto con il seguente comando:
$ git clone /Users/zakh_eecs/_work/LearnGIT/git_remote_repository/project.idiotaClonazione in "progetto"..
fatto.
Abbiamo clonato una nuova copia chiamata project from project.idiota. Entra nella cartella del progetto e controlla i rami:
$ progetto cd$ git branch
* maestro
Quando Git crea un clone iniziale da un repository remoto, ottiene solo il ramo principale. Se usiamo l'opzione -a, vediamo:
$ git ramo -a* maestro
telecomandi/origine/HEAD -> origine/master
telecomandi/origine/sviluppo
telecomandi/origine/master
Notare che non esiste un ramo di sviluppo locale. Inoltre, non abbiamo mai trasferito hotfix e branch sperimentali da project_source a project.git, quindi non li vediamo. Il repository remoto ha rami master e di sviluppo (remoti/origine/HEAD -> origine/master non è un ramo, ti sta solo dicendo dove punta l'HEAD).
Portiamo il ramo di sviluppo nel nostro ambiente di lavoro:
$ git fetch --allRecupero dell'origine
$ git checkout sviluppo
Sviluppo della filiale impostato per monitorare lo sviluppo della filiale remota dall'origine.
Passato a un nuovo ramo "sviluppo"
Se stai usando una versione precedente di Git, potresti dover usare:
$ git checkout sviluppo origine/sviluppoOra se usiamo il comando branch, otteniamo:
$ git ramo -a* sviluppo
maestro
telecomandi/origine/HEAD -> origine/master
telecomandi/origine/sviluppo
telecomandi/origine/master
Possiamo apportare modifiche al ramo di sviluppo, eseguire il commit delle modifiche e quindi inviarlo utilizzando il comando di sviluppo git push origin.
In conclusione
Quando lavori con GitHub e BitBucket potresti utilizzare il collegamento HTTPS o SSH per connetterti al tuo repository remoto. Quindi imposterai la tua origine su quei link. Ma i principi del ramo remoto sono gli stessi descritti qui.
Ulteriori studi:
- https://git-scm.com/docs/git-branch
- https://git-scm.com/book/en/v2/Git-on-the-Server-Setting-Up-the-Server
- https://aiuto.github.com/articles/aggiunta-di-un-progetto-esistente-a-github-usando-la-riga-di-comando/
- https://aiuto.github.com/articoli/pushing-to-a-remote/