Laten we beginnen met de Git-repository. We zullen een map maken met de naam project.git en initialiseer het om de externe repository te worden:
$ mkdir-project.git$ cd-project.git/
$ git init --bare
Lege Git-repository geïnitialiseerd in /Users/zakh_eecs/_work/LearnGIT/git_remote_repository/
projecteren.git/
Ga nu naar een nieuwe locatie waar u een schone map kunt maken. Maak de map project_source en initialiseer deze voor Git:
$ mkdir project_source$ cd project_source
$ git init
Geïnitialiseerde lege Git-repository in /Users/zakh_eecs/_work/LearnGIT/git_branching_source/
project_bron/.git/
$ raak LeesMij aan.tekst
$ git add -A
$ git commit -m "Initial Commit"
[master (root-commit) 176134f] Initial Commit Com
1 bestand gewijzigd, 0 invoegingen (+), 0 verwijderingen (-)
aanmaakmodus 100644 Leesmij.tekst
De project_setup is een Git-map met ReadMe.txt-bestand. Het is echter niet verbonden met onze externe repository. Laten we een project opzetten.git om de externe repository te zijn voor project_source. We kunnen dit bereiken door het volgende commando:
$ git remote add origin /Users/zakh_eecs/_work/LearnGIT/git_remote_repository/project.git$ git push origin master
Objecten tellen: 3, klaar.
Objecten schrijven: 100% (3/3), 213 bytes | 0 bytes/s, klaar.
Totaal 3 (delta 0), hergebruikt 0 (delta 0)
Naar /Users/zakh_eecs/_work/LearnGIT/git_remote_repository/project.git
* [nieuwe branch] master -> master
Met het git remote add origin commando hebben we de verbinding gemaakt tussen project.git en project_source. Met het git push origin master commando hebben we onze master branch naar de remote repository gepusht.
Laten we onze filialen eens bekijken (nog steeds in de map project_source):
$ git branch* meester
$ git branch -r
herkomst/meester
$ git branch -a
* meester
afstandsbedieningen/oorsprong/master
Het eerste commando toont alleen de lokale branch. De optie -r toont de vertakking op afstand. En de -a optie toont zowel lokaal als op afstand.
Laten we een paar branches maken in onze werkdirectory:
$ git branch ontwikkeling$ git branch hotfix
$ git branch experimenteel
$ git branch -a
ontwikkeling
experimenteel
hotfix
* meester
afstandsbedieningen/oorsprong/master
We hebben branches gemaakt met de namen ontwikkeling, hotfix en experimenteel. Ze verschijnen in onze lokale filiaallijst. Maar in de remotes/origin is er alleen een master branch omdat dat de enige is die we hebben gepusht. De star(*) master betekent dat we nog steeds in de lokale master branch zitten. Laten we naar de ontwikkelingstak gaan, wijzigingen vastleggen en die wijzigingen naar de externe repository pushen.
$ git checkout ontwikkelingOvergestapt naar branche 'ontwikkeling'
$ echo abc > Leesmij.tekst
$ git add -A
$ git commit -m "Gewijzigde ontwikkelingstak"
[ontwikkeling dd9933e] Gewijzigde ontwikkelingstak
1 bestand gewijzigd, 1 invoeging (+)
$ git push oorsprong ontwikkeling
Objecten tellen: 3, klaar.
Objecten schrijven: 100% (3/3), 257 bytes | 0 bytes/s, klaar.
Totaal 3 (delta 0), hergebruikt 0 (delta 0)
Naar /Users/zakh_eecs/_work/LearnGIT/git_remote_repository/project.git
* [nieuwe vestiging] ontwikkeling -> ontwikkeling
Laten we nu alle takken controleren:
$ git branch -a* ontwikkeling
experimenteel
hotfix
meester
afstandsbedieningen/oorsprong/ontwikkeling
afstandsbedieningen/oorsprong/master
We zien dat we in de lokale ontwikkelingstak zitten, maar er is ook een externe ontwikkelingstak. Toen we onze wijzigingen pushten met git push origin development, creëerde het de development branch in remotes/origin.
Laten we nu de project_source verlaten en een nieuwe plek zoeken waar we een nieuwe map kunnen hebben. Hier gaan we de externe repository klonen met de volgende opdracht:
$ git clone /Users/zakh_eecs/_work/LearnGIT/git_remote_repository/project.gitKlonen in 'project'…
gedaan.
We hebben een nieuwe kopie gekloond met de naam project from project.git. Ga naar de projectmap en controleer de branches:
$ cd-project$ git branch
* meester
Wanneer Git een eerste kloon maakt van een externe repository, krijgt het alleen de master branch. Als we de -a optie gebruiken, zien we:
$ git branch -a* meester
afstandsbedieningen/oorsprong/HEAD -> oorsprong/master
afstandsbedieningen/oorsprong/ontwikkeling
afstandsbedieningen/oorsprong/master
Merk op dat er geen lokale ontwikkelingsafdeling is. We hebben ook nooit hotfix en experimentele branches van project_source naar project gepusht.git, dus we zien ze niet. De externe repository heeft master- en ontwikkelingstakken (remotes/origin/HEAD -> origin/master is geen branch, het vertelt je alleen waar de HEAD naar verwijst).
Laten we de ontwikkelingstak in onze werkomgeving krijgen:
$ git fetch --allHerkomst ophalen
$ git checkout ontwikkeling
Vestigingsontwikkeling opgezet om de ontwikkeling van externe vestigingen vanaf de oorsprong te volgen.
Overgestapt naar een nieuwe branche 'ontwikkeling'
Als je een oudere versie van Git gebruikt, moet je mogelijk het volgende gebruiken:
$ git checkout ontwikkeling oorsprong/ontwikkelingAls we nu het branch-commando gebruiken, krijgen we:
$ git branch -a* ontwikkeling
meester
afstandsbedieningen/oorsprong/HEAD -> oorsprong/master
afstandsbedieningen/oorsprong/ontwikkeling
afstandsbedieningen/oorsprong/master
We kunnen wijzigingen aanbrengen in de ontwikkelingstak, de wijzigingen vastleggen en deze vervolgens pushen met behulp van het git push origin development-commando.
Tot slot
Wanneer u met GitHub en BitBucket werkt, kunt u een HTTPS- of SSH-link gebruiken om verbinding te maken met uw externe repository. Dus je stelt je oorsprong in op die links. Maar de principes van de remote branch zijn hetzelfde als hier beschreven described.
Verdere studie:
- https://git-scm.com/docs/git-branch
- https://git-scm.com/book/nl/v2/Git-on-the-Server-Setting-Up-the-Server
- https://help.github.com/artikelen/een-bestaand-project-toevoegen aan-github-met-de-opdrachtregel/
- https://help.github.com/artikelen/duwen-naar-een-afstandsbediening/