-
1. Почетак
- 1.1 О контроли верзије
- 1.2 Кратка историја програма Гит
- 1.3 Шта је Гит?
- 1.4 Командна линија
- 1.5 Инсталирање програма Гит
- 1.6 Подешавања за први пут
- 1.7 Тражење помоћи
- 1.8 Резиме
-
2. Основе програма Гит
- 2.1 Прављење Гит репозиторијума
- 2.2 Снимање промена над репозиторијумом
- 2.3 Преглед историје комитова
- 2.4 Опозив
- 2.5 Рад са удаљеним репозиторијумима
- 2.6 Означавање
- 2.7 Гит алијаси
- 2.8 Резиме
-
3. Гранање у програму Гит
- 3.1 Укратко о гранању
- 3.2 Основе гранања и спајања
- 3.3 Управљање гранама
- 3.4 Процеси рада са гранањем
- 3.5 Удаљене гране
- 3.6 Ребазирање
- 3.7 Резиме
-
4. Гит на серверу
- 4.1 Протоколи
- 4.2 Постављање програма Гит на сервер
- 4.3 Генерисање јавног SSH кључа
- 4.4 Подешавање сервера
- 4.5 Гит демон
- 4.6 Паметан HTTP
- 4.7 GitWeb
- 4.8 GitLab
- 4.9 Опције за хостовање које нуде трећа лица
- 4.10 Резиме
-
5. Дистрибуирани Гит
-
6. GitHub
-
7. Гит алати
- 7.1 Избор ревизија
- 7.2 Интерактивно стејџовање
- 7.3 Скривање и чишћење
- 7.4 Потписивање вашег рада
- 7.5 Претрага
- 7.6 Поновно исписивање историје
- 7.7 Демистификовани ресет
- 7.8 Напредно спајање
- 7.9 Rerere
- 7.10 Отклањање грешака са програмом Git
- 7.11 Подмодули
- 7.12 Паковање
- 7.13 Замена
- 7.14 Складиште акредитива
- 7.15 Резиме
-
8. Прилагођавање програма Гит
- 8.1 Конфигурисање програма Гит
- 8.2 Гит атрибути
- 8.3 Гит куке
- 8.4 Пример полисе коју спроводи програм Гит
- 8.5 Резиме
-
9. Гит и остали системи
- 9.1 Гит као клијент
- 9.2 Мигрирање на Гит
- 9.3 Резиме
-
10. Гит изнутра
- 10.1 Водовод и порцелан
- 10.2 Гит објекти
- 10.3 Гит референце
- 10.4 Pack фајлови
- 10.5 Рефспек
- 10.6 Протоколи за пренос
- 10.7 Одржавање и опоравак податак
- 10.8 Променљиве окружења
- 10.9 Резиме
-
A1. Додатак А: Програм Гит у другим окружењима
- A1.1 Графички интерфејси
- A1.2 Гит у Visual Studio
- A1.3 Гит у Visual Studio Code
- A1.4 Гит у IntelliJ / PyCharm / WebStorm / PhpStorm / RubyMine
- A1.5 Гит у Sublime Text
- A1.6 Гит унутар Bash
- A1.7 Гит у Zsh
- A1.8 Гит у Powershell
- A1.9 Резиме
-
A2. Додатак Б: Уграђивање програма Гит у ваше апликације
- A2.1 Гит из командне линије
- A2.2 Libgit2
- A2.3 JGit
- A2.4 go-git
- A2.5 Dulwich
-
A3. Додатак В: Гит команде
- A3.1 Подешавање и конфигурација
- A3.2 Набављање и креирање пројеката
- A3.3 Основно снимање
- A3.4 Гранање и спајање
- A3.5 Дељење и ажурирање пројеката
- A3.6 Инспекција и поређење
- A3.7 Отклањање грешака
- A3.8 Крпљење
- A3.9 Имејл
- A3.10 Спољни системи
- A3.11 Администрација
- A3.12 Водоводне команде
10.8 Гит изнутра - Променљиве окружења
Променљиве окружења
Програм Гит се увек извршава у bash
љуски и користи већи број променљивих окружења које одређује његово понашање.
Понекад је згодно знати које су и како могу да се употребе за прилагођење понашања програма Гит вашим потребама.
Ово није потпуна листа свих променљивих окружења које програм Гит ослушкује, мада ћемо преставити оне најкорисније.
Глобално понашање
Нека од општих понашања програма Гит као компјутерског програма зависе од променљивих окружења.
GIT_EXEC_PATH
одређује место на којем програм Гит тражи своје потпрограме (као што су git-commit
, git-diff
и остали).
Тренутну вредност можете проверити ако извршите git --exec-path
.
HOME
се у општем случају не сматра за променљиву која треба да се прилагоди (превише осталих ствари зависи од ње), али она је место на којем програм Гит тражи свој глобални конфигурациони фајл.
Ако желите заиста преносну инсталацију програма Гит, заједно са глобалном конфигурацијом, у профилу љуске преносног програма Гит можете да преиначите вредност HOME
.
PREFIX
је слична, само за конфигурацију на нивоу система.
Програм Гит тражи овај фајл у $PREFIX/etc/gitconfig
.
GIT_CONFIG_NOSYSTEM
, ако је постављена, искључује употребу системског конфигурационог фајла.
Ово је корисно ако системска конфигурација квари ваше команде, али немате дозволу да је измените или уклоните.
GIT_PAGER
контролише програм који се користи у командној линији за приказ излаза у више страница.
Ако није постављена, користиће се вредност променљиве PAGER
.
GIT_EDITOR
је едитор који програм Гит покреће када је потребно да корисник уреди неки текст (на пример, комит поруку).
Ако није постављена, користиће се вредност променљиве EDITOR
.
Локације репозиторијума
Програм Гит употребљава неколико променљивих окружења да одреди начин на који је у спрези са текућим репозиторијумом.
GIT_DIR
је локација .git
директоријума.
Ако се не наведе, програм Гит обилази стабло директоријума навише све док не стигне у ~
или /
и у сваком кораку покушава да нађе .git
директоријум.
GIT_CEILING_DIRECTORIES
контролише начин на који се тражи .git
директоријум.
Ако приступите директоријумима који се споро учитавају (као што су они који се налазе на уређају који чита и уписује по тракама, или преко споре мрежне везе), вероватно ћете хтети да Програм Гит прекине претрагу раније него иначе, посебно ако је програм Гит позван током изградње одзива ваше љуске.
GIT_WORK_TREE
је локација корена радног директоријума за репозиторијум који није огољен.
Ако се не наведе, користиће се директоријум родитељ $GIT_DIR
директоријума.
GIT_INDEX_FILE
је путања до индекс фајла (само за неогољене репозиторијуме).
GIT_OBJECT_DIRECTORY
може да се користи за навођење локације директоријума чије је уобичајено место .git/objects
.
GIT_ALTERNATE_OBJECT_DIRECTORIES
је листа раздвојена двотачкама (форматирана као /дир/један:/дир/два:…
) која програму Гит говори где да потражи објекте ако се не налазе у GIT_OBJECT_DIRECTORY
директоријуму.
Ако имате много пројеката са великим фајловима који имају потпуно исте садржаје, употребите ово како се не би чувало много копија тих фајлова.
Спецификације путања (Pathspecs)
„pathspec” се представља начин на који стварима у програму Гит наводите путање, укључујући и употребу џокера.
Они се користе у .gitignore
фајлу, али и на командној линији (git add *.c
).
GIT_GLOB_PATHSPECS
и GIT_NOGLOB_PATHSPECS
контролишу подразумевано понашање џокера у спецификацијама путање.
Ако се GIT_GLOB_PATHSPECS
постави на 1, џокер карактери се понашају као џокери (што је и подразумевана вредност); ако се GIT_NOGLOB_PATHSPECS
постави на 1, џокер карактери се подударају сами са собом, што значи да би се нешто као што је *.c
подударило само са фајлом чије је име „\*.c”, а не са било којим фајлом чије се име завршава на .c
.
Ово можете да преиначите за појединачне случајеве тако што спецификацију путање почнете са :(glob)
или :(literal)
, као у :(glob)\*.c
.
GIT_LITERAL_PATHSPECS
искључује оба претходна понашања; неће радити ниједан џокер карактер, а искључиће се и префикси за премошћавање.
GIT_ICASE_PATHSPECS
поставља да све спецификације путања не праве разлику у величини слова.
Комитовање
Завршно креирање Гит комит објекта обично обавља git-commit-tree
која користи ове променљиве окружења као свој примарни извор информација, а конфигурационим вредностима прибегава само у случају да нису присутне.
GIT_AUTHOR_NAME
је читљиво име „author” поља.
GIT_AUTHOR_EMAIL
је имејл за „author” поље.
GIT_AUTHOR_DATE
је временска ознака која се користи за „author” поље.
GIT_COMMITTER_NAME
поставља људско име за „committer” поље.
GIT_COMMITTER_EMAIL
је имејл адреса за „committer” поље.
GIT_COMMITTER_DATE
се користи за временску ознаку у „committer” пољу.
EMAIL
је резервна имејл адреса у случају када није постављена конфигурациона вредност user.email
.
Ако ова није постављена, програм Гит прибегава именима системског корисника и хоста.
Умрежавање
Програм Гит за мрежне операције преко HTTP протокола користи curl
библиотеку, тако да GIT_CURL_VERBOSE
програму Гит говори да емитује све поруке које генерише та библиотека.
Ово је слично са curl -v
на командној линији.
GIT_SSL_NO_VERIFY
говори програму Гит да не проверава SSL сертификате.
Некада то може бити неопходно као на пример када за сервирање Гит репозиторијума преко HTTPS користите самопотписани сертификат, или ако се усред подешавања Гит сервера и још увек нисте инсталирали потпуни сертификат.
Ако је проток података HTTP операције мањи од GIT_HTTP_LOW_SPEED_LIMIT
фајлова у секунди у периоду дужем од GIT_HTTP_LOW_SPEED_TIME
секунди, програм Гит ће прекинути ту операцију.
Ове вредности преиначују конфигурационе вредности http.lowSpeedLimit
и http.lowSpeedTime
.
GIT_HTTP_USER_AGENT
поставља user-agent стринг који програм Гит користи када комуницира преко HTTP.
Подразумевана вредност личи на git/2.0.0
.
Прављење разлика и спајање
GIT_DIFF_OPTS
је донекле нетачно име.
Једине важеће вредности су -u<n>
или --unified=<n>
које контролишу број контекст линија које се приказују у излазу команде git diff
.
GIT_EXTERNAL_DIFF
се користи за премошћавање конфигурационе вредности diff.external
.
Ако је постављена, програм Гит ће покренути тај програм када извршите команду git diff
.
GIT_DIFF_PATH_COUNTER
и GIT_DIFF_PATH_TOTAL
су корисне из програма који наведе GIT_EXTERNAL_DIFF
или diff.external
.
Прва представља фајл из низа за који се ради разлика (почевши од 1), а друга укупан број фајлова у групи.
GIT_MERGE_VERBOSITY
контролише излаз за рекурзивну стратегију спајања.
Дозвољене су следеће вредности:
-
0 нема никаквог излаза, осим можда једне поруке о грешки.
-
1 приказују се само конфликти.
-
2 приказују се и измене фајла.
-
3 приказује када се фајлови прескоче јер нису били мењани.
-
4 приказују се све путање онако како се обрађују.
-
5 и веће приказује детаљне дибаг информације.
Подразумевана вредност је 2.
Дибаг
Желите заиста да знате шта је то програм Гит наумио? У програм Гит је уграђен прилично комплетан скуп трагова, па све што треба да урадите је да их укључите. Ево могућих вредности ових променљивих:
-
„true”, „1”, или „2” – категорија трага се исписује на stderr.
-
Апсолутна путања која почиње са
/
– излаз трага ће се уписати у тај фајл.
GIT_TRACE
контролише опште трагове који не упадају ни у једну одређену категорију.
То укључује развијање алијаса и делегирање другим потпрограмима.
$ GIT_TRACE=true git lga
20:12:49.877982 git.c:554 trace: exec: 'git-lga'
20:12:49.878369 run-command.c:341 trace: run_command: 'git-lga'
20:12:49.879529 git.c:282 trace: alias expansion: lga => 'log' '--graph' '--pretty=oneline' '--abbrev-commit' '--decorate' '--all'
20:12:49.879885 git.c:349 trace: built-in: git 'log' '--graph' '--pretty=oneline' '--abbrev-commit' '--decorate' '--all'
20:12:49.899217 run-command.c:341 trace: run_command: 'less'
20:12:49.899675 run-command.c:192 trace: exec: 'less'
GIT_TRACE_PACK_ACCESS
контролише праћење packfile приступа.
Прво поље је packfile којем се приступа, а друго је померај унутар тог фајла:
$ GIT_TRACE_PACK_ACCESS=true git status
20:10:12.081397 sha1_file.c:2088 .git/objects/pack/pack-c3fa...291e.pack 12
20:10:12.081886 sha1_file.c:2088 .git/objects/pack/pack-c3fa...291e.pack 34662
20:10:12.082115 sha1_file.c:2088 .git/objects/pack/pack-c3fa...291e.pack 35175
# […]
20:10:12.087398 sha1_file.c:2088 .git/objects/pack/pack-e80e...e3d2.pack 56914983
20:10:12.087419 sha1_file.c:2088 .git/objects/pack/pack-e80e...e3d2.pack 14303666
On branch master
Your branch is up-to-date with 'origin/master'.
nothing to commit, working directory clean
GIT_TRACE_PACKET
омогућава праћење мрежних операција на нивоу пакета.
$ GIT_TRACE_PACKET=true git ls-remote origin
20:15:14.867043 pkt-line.c:46 packet: git< # service=git-upload-pack
20:15:14.867071 pkt-line.c:46 packet: git< 0000
20:15:14.867079 pkt-line.c:46 packet: git< 97b8860c071898d9e162678ea1035a8ced2f8b1f HEAD\0multi_ack thin-pack side-band side-band-64k ofs-delta shallow no-progress include-tag multi_ack_detailed no-done symref=HEAD:refs/heads/master agent=git/2.0.4
20:15:14.867088 pkt-line.c:46 packet: git< 0f20ae29889d61f2e93ae00fd34f1cdb53285702 refs/heads/ab/add-interactive-show-diff-func-name
20:15:14.867094 pkt-line.c:46 packet: git< 36dc827bc9d17f80ed4f326de21247a5d1341fbc refs/heads/ah/doc-gitk-config
# […]
GIT_TRACE_PERFORMANCE
контролише како се логују подаци о перформанси.
Излаз приказује колико траје извршавање неке одређене git команде.
$ GIT_TRACE_PERFORMANCE=true git gc
20:18:19.499676 trace.c:414 performance: 0.374835000 s: git command: 'git' 'pack-refs' '--all' '--prune'
20:18:19.845585 trace.c:414 performance: 0.343020000 s: git command: 'git' 'reflog' 'expire' '--all'
Counting objects: 170994, done.
Delta compression using up to 8 threads.
Compressing objects: 100% (43413/43413), done.
Writing objects: 100% (170994/170994), done.
Total 170994 (delta 126176), reused 170524 (delta 125706)
20:18:23.567927 trace.c:414 performance: 3.715349000 s: git command: 'git' 'pack-objects' '--keep-true-parents' '--honor-pack-keep' '--non-empty' '--all' '--reflog' '--unpack-unreachable=2.weeks.ago' '--local' '--delta-base-offset' '.git/objects/pack/.tmp-49190-pack'
20:18:23.584728 trace.c:414 performance: 0.000910000 s: git command: 'git' 'prune-packed'
20:18:23.605218 trace.c:414 performance: 0.017972000 s: git command: 'git' 'update-server-info'
20:18:23.606342 trace.c:414 performance: 3.756312000 s: git command: 'git' 'repack' '-d' '-l' '-A' '--unpack-unreachable=2.weeks.ago'
Checking connectivity: 170994, done.
20:18:25.225424 trace.c:414 performance: 1.616423000 s: git command: 'git' 'prune' '--expire' '2.weeks.ago'
20:18:25.232403 trace.c:414 performance: 0.001051000 s: git command: 'git' 'rerere' 'gc'
20:18:25.233159 trace.c:414 performance: 6.112217000 s: git command: 'git' 'gc'
GIT_TRACE_SETUP
приказује информације о ономе што програм Гит открива у вези репозиторијума и окружења са којим је у контакту.
$ GIT_TRACE_SETUP=true git status
20:19:47.086765 trace.c:315 setup: git_dir: .git
20:19:47.087184 trace.c:316 setup: worktree: /Users/ben/src/git
20:19:47.087191 trace.c:317 setup: cwd: /Users/ben/src/git
20:19:47.087194 trace.c:318 setup: prefix: (null)
On branch master
Your branch is up-to-date with 'origin/master'.
nothing to commit, working directory clean
Разно
GIT_SSH
, ако се наведе, то је програм који се уместо стандардне ssh
команде позива онда када програм Гит покуша да се повеже са SSH хостом.
Позива се као $GIT_SSH [корисничкоиме@]хост [-p <порт>] <команда>
.
Имајте на уму да ово није најједноставнији начин да се прилагоди начин на који се позива програм ssh
; он не подржава додатне параметре командне линије, тако да ћете морати да напишете скрипту омотач и поставите да GIT_SSH
показује на њу.
It’s probably easier just to use the ~/.ssh/config
file for that.
GIT_ASKPASS
је премошћавање core.askpass
конфигурационе вредности.
Ово је програм који се позива кадгод програм Гит треба корисника да пита за акредитиве, који као аргумент командне линије може да прихвати текстуални одзив, а требало би да врати одговор на stdout
(за више информација о овом подсистему, погледајте Складиште акредитива).
GIT_NAMESPACE
контролише приступ референцама у простору имена и еквивалентна је са заставицом --namespace
.
Ово је углавном корисно на серверској страни када можете пожелети да у један репозиторијум сачувате више рачви једног јединог репозиторијума, чувајући одвојено само референце.
GIT_FLUSH
може да се употреби да се програм Гит примора да када инкрементално уписује на stdout користи У/И који се не баферује.
Вредност 1 наводи програм Гит да чешће спира податке, а вредност 0 чини да се сав излаз баферује.
Подразумевана вредност (ако се ова променљива не постави) је изабрана тако да одговара шеми баферовања која зависи од активности и режима излаза.
GIT_REFLOG_ACTION
вам омогућава да задате описни текст који се исписује у reflog.
Ево примера:
$ GIT_REFLOG_ACTION="my action" git commit --allow-empty -m 'my message'
[master 9e3d55a] my message
$ git reflog -1
9e3d55a HEAD@{0}: my action: my message