-
1. Začetek
- 1.1 O nadzoru različic
- 1.2 Kratka zgodovina Gita
- 1.3 Kaj je Git?
- 1.4 Ukazna vrstica
- 1.5 Namestitev Gita
- 1.6 Prva nastavitev Gita
- 1.7 Pridobivanje pomoči
- 1.8 Povzetek
-
2. Osnove Git
- 2.1 Pridobivanje repozitorija Git
- 2.2 Snemanje sprememb v repozitorij
- 2.3 Pregled zgodovine potrditev
- 2.4 Razveljavljanje stvari
- 2.5 Delo z daljavami
- 2.6 Označevanje
- 2.7 Aliasi Git
- 2.8 Povzetek
-
3. Veje Git
- 3.1 Veje na kratko
- 3.2 Osnove vej in združevanja
- 3.3 Upravljanje vej
- 3.4 Poteki dela z vejami
- 3.5 Oddaljene veje
- 3.6 Ponovno baziranje
- 3.7 Povzetek
-
4. Git na strežniku
- 4.1 Protokoli
- 4.2 Pridobitev Gita na strežniku
- 4.3 Generiranje vaših javnih ključev SSH
- 4.4 Nastavitev strežnika
- 4.5 Prikriti proces Git
- 4.6 Pametni HTTP
- 4.7 GitWeb
- 4.8 GitLab
- 4.9 Možnosti gostovanja pri tretjih ponudnikih
- 4.10 Povzetek
-
5. Porazdeljeni Git
- 5.1 Porazdeljeni poteki dela
- 5.2 Prispevek k projektu
- 5.3 Vzdrževanje projekta
- 5.4 Povzetek
-
6. GitHub
-
7. Orodja Git
- 7.1 Izbira revizije
- 7.2 Interaktivno pripravljanje
- 7.3 Shranjevanje na varno (angl. stashing) in čiščenje
- 7.4 Podpisovanje vašega dela
- 7.5 Iskanje
- 7.6 Prepisovanje zgodovine
- 7.7 Demistifikacija ponastavitve
- 7.8 Napredno združevanje
- 7.9 Rerere
- 7.10 Razhroščevanje z Gitom
- 7.11 Podmoduli
- 7.12 Povezovanje v pakete
- 7.13 Zamenjava
- 7.14 Shramba poverilnic
- 7.15 Povzetek
-
8. Prilagoditev Gita
- 8.1 Konfiguracija Git
- 8.2 Atributi Git
- 8.3 Kljuke Git
- 8.4 Primer pravilnika, ki ga uveljavlja Git
- 8.5 Povzetek
-
9. Git in ostali sistemi
- 9.1 Git kot odjemalec
- 9.2 Migracija na Git
- 9.3 Povzetek
-
10. Notranjost Gita
- 10.1 Napeljava in keramika
- 10.2 Objekti Git
- 10.3 Reference Git
- 10.4 Packfiles (datoteke zmanjšanih podatkov)
- 10.5 Refspec
- 10.6 Protokoli prenosa
- 10.7 Vzdrževanje in obnovitev podatkov
- 10.8 Spremenljivke okolja
- 10.9 Povzetek
-
A1. Dodatek A: Git v drugih okoljih
- A1.1 Grafični vmesniki
- A1.2 Git v Visual Studio
- A1.3 Git v Visual Studio Code
- A1.4 Git v IntelliJ / PyCharm / WebStorm / PhpStorm / RubyMine
- A1.5 Git v Sublime Text
- A1.6 Git v Bashu
- A1.7 Git v Zsh
- A1.8 Git v Powershellu
- A1.9 Povzetek
-
A2. Dodatek B: Vdelava Gita v vašo aplikacijo
- A2.1 Git v ukazni vrstici
- A2.2 Libgit2
- A2.3 JGit
- A2.4 go-git
- A2.5 Dulwich
-
A3. Dodatek C: Ukazi Git
- A3.1 Nastavitev in konfiguracija
- A3.2 Pridobivanje in ustvarjanje projektov
- A3.3 Osnove posnetkov
- A3.4 Veje in združevanje
- A3.5 Deljenje in posodabljanje projektov
- A3.6 Pregled in primerjava
- A3.7 Razhroščevanje
- A3.8 Popravljanje
- A3.9 E-pošta
- A3.10 Zunanji sistemi
- A3.11 Administracija
- A3.12 Orodja za sisteme napeljave
2.6 Osnove Git - Označevanje
Označevanje
Kot večina VCS-jev ima Git zmožnost označevanja določenih točk v zgodovini repozitorija kot pomembne.
Običajno ljudje uporabljajo to funkcionalnost za določanje točk izdaj (v1.0
, v2.0
in tako naprej).
V tem razdelku se boste naučili, kako izpisati obstoječe oznake, kako jih ustvariti in izbrisati ter kateri različni tipi oznak so na voljo.
Izpisovanje vaših oznak
Izpisovanje obstoječih oznak v Gitu je precej enostavno.
Samo vpišite git tag
(z možnostjo po izbiri -l
ali --list
):
$ git tag
v1.0
v2.0
Ta ukaz izpiše oznake v abecednem vrstnem redu; vrstni red, v katerem se pojavijo, nima neke prave pomembnosti.
Oznake, ki se prilegajo določenemu vzorcu, lahko tudi iščete. Izvorni repozitorij Git na primer vsebuje več kot 500 oznak. Če vas zanima pogledati samo serijo 1.8.5, lahko poženete to:
$ git tag -l "v1.8.5*"
v1.8.5
v1.8.5-rc0
v1.8.5-rc1
v1.8.5-rc2
v1.8.5-rc3
v1.8.5.1
v1.8.5.2
v1.8.5.3
v1.8.5.4
v1.8.5.5
Opomba
|
Izpis oznak z maskirnim znakom zahteva možnost
-l ali --list
Če želite samo celoten seznam oznak, bo pogon ukaza Če pa podajate vzorec z maskirnim znakom (nadomestnim znakom, angl. wildcard), da se prilega imenom oznak, je uporaba |
Ustvarjanje oznak
Git podpira dva tipa oznak: enostavne in anotirane.
Enostavna oznaka (angl. lightweight tag) je zelo podobna veji, ki se ne spremeni — je samo kazalec na določeno potrditev.
Anotirane oznake so po drugi strani shranjene kot polni objekti v podatkovni bazi Git. Imajo kontrolne vsote; vsebujejo ime, e-pošto in datum označevalca; imajo sporočilo oznake; in lahko so podpisane in preverjene z GNU Privacy Guard (GPG). V splošnem je priporočljivo, da ustvarjate anotirane oznake, da imate lahko vse te informacije; vendar če želite začasno oznako, ali zaradi kakšnega razloga ne želite ohraniti ostalih informacij, so na voljo tudi enostavne oznake.
Anotirane oznake
Ustvarjanje anotirane oznake v Gitu je enostavno.
Najenostavnejši način je določiti -a
, ko poženete ukaz tag
:
$ git tag -a v1.4 -m "my version 1.4"
$ git tag
v0.1
v1.3
v1.4
-m
določa sporočilo označevanja, ki je shranjeno skupaj z oznako.
Če ne določite sporočila za anotirano oznako, Git zažene vaš urejevalnik, da ga lahko vpišete vanj.
Z uporabo ukaza git show
lahko pogledate podatke oznake skupaj s potrditvijo, ki je bila označena:
$ git show v1.4
tag v1.4
Tagger: Ben Straub <ben@straub.cc>
Date: Sat May 3 20:19:12 2014 -0700
my version 1.4
commit ca82a6dff817ec66f44342007202690a93763949
Author: Scott Chacon <schacon@gee-mail.com>
Date: Mon Mar 17 21:52:11 2008 -0700
Change version number
To pokaže informacije označitelja, datum potrditve, ko je bila označena, in sporočilo anotacije pred prikazom informacij potrditve.
Enostavne oznake
Drug način označitve potrditve je enostavna oznaka.
To je v osnovi kontrolna vsota potrditve shranjena v datoteki — ne ohrani se nobena druga informacija.
Da ustvarite enostavno oznako, ne dodajte možnosti -a
, -s
ali -m
, samo podajte ime oznake:
$ git tag v1.4-lw
$ git tag
v0.1
v1.3
v1.4
v1.4-lw
v1.5
Tokrat, če poženete git show
na oznaki, ne boste videli dodatnih informacij oznake.
Ukaz samo prikazuje potrditev:
$ git show v1.4-lw
commit ca82a6dff817ec66f44342007202690a93763949
Author: Scott Chacon <schacon@gee-mail.com>
Date: Mon Mar 17 21:52:11 2008 -0700
Change version number
Označevanje kasneje
Potrditve lahko označite tudi za tem, ko ste se prestavili preko njih. Predpostavimo, da je vaša zgodovina potrditev videti takole:
$ git log --pretty=oneline
15027957951b64cf874c3557a0f3547bd83b3ff6 Merge branch 'experiment'
a6b4c97498bd301d84096da251c98a07c7723e65 Create write support
0d52aaab4479697da7686c15f77a3d64d9165190 One more thing
6d52a271eda8725415634dd79daabbc4d9b6008e Merge branch 'experiment'
0b7434d86859cc7b8c3d5e1dddfed66ff742fcbc Add commit function
4682c3261057305bdd616e23b64b0857d832627b Add todo file
166ae0c4d3f420721acbb115cc33848dfcc2121a Create write support
9fceb02d0ae598e95dc970b74767f19372d61af8 Update rakefile
964f16d36dfccde844893cac5b347e7b3d44abbc Commit the todo
8a5cbc430f1a9c3d00faaeffd07798508422908a Update readme
Sedaj predpostavimo, da ste pozabili označiti projekt pri v1.2
, ki je bil pri potrditvi »Update rakefile«.
Lahko jo dodate za tem.
Da označite to potrditev, na koncu ukaza določite kontrolno vsoto potrditve (ali del nje):
$ git tag -a v1.2 9fceb02
Vidite lahko, da ste označili potrditev:
$ git tag
v0.1
v1.2
v1.3
v1.4
v1.4-lw
v1.5
$ git show v1.2
tag v1.2
Tagger: Scott Chacon <schacon@gee-mail.com>
Date: Mon Feb 9 15:32:16 2009 -0800
version 1.2
commit 9fceb02d0ae598e95dc970b74767f19372d61af8
Author: Magnus Chacon <mchacon@gee-mail.com>
Date: Sun Apr 27 20:43:35 2008 -0700
Update rakefile
...
Deljenje oznak
Privzeto, ukaz git push
ne prenese oznak na oddaljene strežnike.
Morali boste eksplicitno poslati oznake na deljeni strežnik za tem, ko ste jih naredili.
Ta proces je enak deljenju oddaljenih vej — lahko poženete git push origin <tagname>
.
$ git push origin v1.5
Counting objects: 14, done.
Delta compression using up to 8 threads.
Compressing objects: 100% (12/12), done.
Writing objects: 100% (14/14), 2.05 KiB | 0 bytes/s, done.
Total 14 (delta 3), reused 0 (delta 0)
To git@github.com:schacon/simplegit.git
* [new tag] v1.5 -> v1.5
Če imate veliko oznak, ki jih želite poslati naenkrat, lahko uporabite tudi možnost --tags
pri ukazu git push
.
To bo na oddaljeni strežnik preneslo vse vaše oznake, ki še niso tam.
$ git push origin --tags
Counting objects: 1, done.
Writing objects: 100% (1/1), 160 bytes | 0 bytes/s, done.
Total 1 (delta 0), reused 0 (delta 0)
To git@github.com:schacon/simplegit.git
* [new tag] v1.4 -> v1.4
* [new tag] v1.4-lw -> v1.4-lw
Sedaj, ko nekdo drug klonira ali prenese iz vašega repozitorija, bo dobil tudi vse vaše oznake.
Opomba
|
git push pošlje oba tipa oznak
|
Brisanje oznak
Da izbrišete oznako na svojem lokalnem repozitoriju, lahko uporabite git tag -d <tagname>
.
Na primer, našo enostavno oznako zgoraj bi lahko odstranili takole:
$ git tag -d v1.4-lw
Deleted tag 'v1.4-lw' (was e7d5add)
Bodite pozorni, saj to ne odstrani oznake iz nobenega oddaljenega strežnika. Obstajata dve pogosti variaciji za brisanje oznake iz oddaljenega strežnika.
Prva variacija je git push <remote> :refs/tags/<tagname>
:
$ git push origin :refs/tags/v1.4-lw
To /git@github.com:schacon/simplegit.git
- [deleted] v1.4-lw
Način za interpretacijo zgornjega je to prebrati kot, vrednost null pred znakom dvopičja je poslan na oddaljeno ime oznake, kar jo ustrezno izbriše.
Drugi (in bolj intuitiven) način za brisanje oddaljene oznake je:
$ git push origin --delete <tagname>
Izvlečenje oznak
Če želite pogledati različice datotek, na katere oznaka kaže, lahko naredite git checkout
določene oznake, vendar vam to vaš repozitorij da v »stanje ločene glave« (angl. detached HEAD state), kar ima določene stranske učinke:
$ git checkout v2.0.0
Note: switching to 'v2.0.0'.
You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by performing another checkout.
If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:
git switch -c <new-branch-name>
Or undo this operation with:
git switch -
Turn off this advice by setting config variable advice.detachedHead to false
HEAD is now at 99ada87... Merge pull request #89 from schacon/appendix-final
$ git checkout v2.0-beta-0.1
Previous HEAD position was 99ada87... Merge pull request #89 from schacon/appendix-final
HEAD is now at df3f601... Add atlas.json and cover image
Če v »stanju ločene glave« (angl. detached HEAD state) naredite spremembe in nato ustvarite potrditev, bo ostala oznaka enaka, vendar vaša nova potrditev ne bo pripadala nobeni veji in bo nedosegljiva, razen preko točne zgoščene vrednosti potrditve. Torej, če morate narediti spremembe — na primer, da popravljate hrošča na starejši verziji — boste na splošno želeli ustvariti vejo:
$ git checkout -b version2 v2.0.0
Switched to a new branch 'version2'
Če to naredite in naredite potrditev, bo vaša veja version2
malenkost drugačna od vaše oznake v2.0.0
, saj ste se premaknili s spremembami naprej, torej bodite previdni.