-
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 Водоводне команде
8.1 Прилагођавање програма Гит - Конфигурисање програма Гит
Досад смо прешли основе начина на који програм Гит функционише и како се користи, а затим смо представили више алата које програм Гит нуди као помоћ за једноставно и ефикасно коришћење. У овом поглављу ћемо видети како програм Гит можете да прилагодите својим потребама, тако што ћемо увести неколико важних конфигурационих подешавања система кука. Помоћу ових алата, лако је подесити програм Гит тако да ради баш онако како ви, ваша компанија или ваша група то жели.
Конфигурисање програма Гит
Као што сте укратко прочитали у Почетак, конфигурациона подешавања програма Гит можете поставити командом git config
.
Једна од првих ствари које сте подесили су били ваше име и мејл адреса:
$ git config --global user.name "John Doe"
$ git config --global user.email johndoe@example.com
Сада ћете научити још неколико занимљивих опција које можете подесити на овај начин како бисте којима програм Гит прилагођавате својим потребама.
Најпре кратак резиме: програм Гит користи низ конфигурационих фајлова којима одређује неподразумевано понашање које је по вашој вољи.
Прво место на коме програм Гит тражи ове вредности су у фајлу [путања]/etc/gitconfig
и он садржи подешавања која се примењују на сваког корисника на систему и на све њихове репозиторијуме.
Ако команди git config
проследите опцију --system
, програм Гит ће вршити упис и читање из овог фајла.
Следеће место које програм Гит гледа је ~/.gitconfig
(или ~/.config/git/config
) фајл који је посебан за сваког корисника.
Прослеђивањем опције --global
, програм Гит можете приморати да чита и пише одавде.
И на крају, програм Гит гледа конфигурационе вредности у конфигурационом фајлу у Гит директоријуму (.git/config
) оног репозиторијума који тренутно користите.
Ове вредности су одређене само за тај један репозиторијум и на њих реферишете прослеђивањем опције --local
команди git config
.
Ако не наведете ниво са којим желите да радите, ово је подразумевани.
Сваки од ових „нивоа” (системски, глобални, локални) пише преко вредности из претходног нивоа, што значи да ће, на пример, вредности у .git/config
преиначити оне из [путања]/etc/gitconfig
.
Белешка
|
Конфигурациони фајлови програма Гит се чувају као обичан текст, што значи да све вредности можете подесити и ручном изменом фајла, водећи рачуна о томе да синтакса буде исправна.
Ипак, у општем случају је једноставније извршити команду |
Основна конфигурација клијента
Конфигурационе опције које програм Гит препознаје се могу сврстати у две категорије: клијентске и серверске. Већина опција је на страни клијента — то су оне које подешавају личних радно окружење. Подржано је много, много конфигурационих опција, али велики део њих је користан само у одређеним крајњим случајевима. Овде ћемо покрити само оне најчешће и најкорисније. Ако желите да погледате листу свих опција које препознаје ваша верзија програма Гит, можете да извршите следећу команду:
$ man git-config
Ова команда приказује све доступне опције, прилично детаљно. Овај референтни материјал можете наћи и на https://git-scm.com/docs/git-config.
core.editor
Са подразумеваним подешавањима, програм Гит користи штагод постављено као подразумевани текст едитор преко једне од променљивих љуске $VISUAL
или $EDITOR
, а ако није постављена ниједна, користиће едитор vi
за креирање и уређивање комит порука и порука ознака.
Ако желите да промените то подразумевано подешавање на нешто друго, можете да искористите подешавање core.editor
:
$ git config --global core.editor emacs
Одсада, штагод да је у љуски подешено као подразумевани едитор, програм Гит ће покренути Emacs за измену порука.
commit.template
Ако подесите ово на путању до фајла у свом систему, програм Гит ће га користити као подразумевану почетну поруку када комитујете. Вредност у креирању прилагођеног комит шаблона је што га можете употребити да подсетите себе (или друге) на правилан формат и стил када се креира комит порука.
На пример, рецимо да направите шаблон у фајлу ~/gitmessage.txt
који изгледа овако:
Subject line (try to keep under 50 characters)
Multi-line description of commit,
feel free to be detailed.
[Ticket: X]
Приметите како овај комит шаблон подсећа комитера да линију теме држи кратком (зарад излаза команде git log --oneline
), да испод ње дода још детаља и да се позове на проблем или тикет баг трекера ако постоји.
Ако програму Гит желите рећи да ово користи као подразумевану поруку која се појављује у едитору када извршите git commit
, треба да подесите конфигурациону вредност commit.template
:
$ git config --global commit.template ~/.gitmessage.txt
$ git commit
Када комитујете, ваш едитор ће се отворити и приказати нешто овако на месту комит поруке:
Subject line (try to keep under 50 characters)
Multi-line description of commit,
feel free to be detailed.
[Ticket: X]
# Please enter the commit message for your changes. Lines starting
# with '#' will be ignored, and an empty message aborts the commit.
# On branch master
# Changes to be committed:
# (use "git reset HEAD <file>..." to unstage)
#
# modified: lib/test.rb
#
~
~
".git/COMMIT_EDITMSG" 14L, 297C
Ако ваш тим има полису која управља форматом комит поруке, постављање шаблона за ту полису на систем и конфигурисање програма Гит да га подразумевано користи може помоћи да повећате шансе да се та полиса редовно поштује.
core.pager
Ово подешавање одређује који пагинатор се користи када програм Гит дели излазе као што су log
и diff
на странице.
Можете да га поставити на more
или на ваш омиљени пагинатор (подразумевано је less
), или га можете искључити тако што ћете га поставити на празан стринг:
$ git config --global core.pager ''
Ако извршите ово, програм Гит ће излаз свих команди исписати одједном, без обзира на то колико су дугачки.
user.signingkey
Ако правите потписане прибележене ознаке (којима смо се бавили у Потписивање вашег рада) , постављање GPG кључа за потписивање као подешавање у конфигурацији ће учинити процес много једноставнијим. Подесите ID свог кључа на следећи начин:
$ git config --global user.signingkey <gpg-key-id>
Ознаке сада можете да потпишете без потребе да сваки пут наводите кључ у git tag
команди:
$ git tag -s <име-ознаке>
core.excludesfile
У
.gitignore
фајл свог пројекта можете поставити шаблоне тако да их програм Гит не би видео као непраћене фајлове или покушао да их дода на стејџ када извршите git add
над њима, као што смо видели у Игнорисање фајлова.
Али одређене фајлове понекада желите да игноришете у свим репозиторијума са којима радите.
Ако се на вашем компјутеру извршава мекОС, вероватно су вам познати .DS_store
фајлови. Ако је ваш омиљени едитор Emacs или Vim, знате за имена фајлова које се завршавају са ~
или .swp
.
Ово подешавање вам омогућава да напишете неку врсту глобалног .gitignore
фајла.
Ако креирате фајл ~/.gitignore_global
са следећим садржајем:
*~
.*.swp
.DS_Store
…и извршите git config --global core.excludesfile ~/.gitignore_global
, програм Гит вам никад више неће правити проблеме са тим фајловима.
help.autocorrect
Ако погрешно укуцате команду, програм Гит вам показује нешто слично овоме:
$ git chekcout master
git: 'chekcout' is not a git command. See 'git --help'.
The most similar command is
checkout
Програм Гит се труди да вам помогне тако што покушава да одреди коју сте команду желели да укуцате, али ипак одбија да је изврши.
Ако help.autocorrect
поставите на 1
, програм Гит ће вам аутоматски покренути ову команду:
$ git chekcout master
WARNING: You called a Git command named 'chekcout', which does not exist.
Continuing under the assumption that you meant 'checkout'
in 0.1 seconds automatically...
Обратите пажњу на „0.1 seconds”.
help.autocorrect
је уствари цео број који представља десетинке.
Ако га подесите на 50, програм Гит ће вам оставити пет секунди да се предомислите пре него што изврши команду коју је аутоматски исправио.
Боје у програму Гит
Програм Гит у потпуности подржава обојени излаз терминала, што доста помаже у бржем и лакшем визуелном парсирању излаза команде. Постоји велики број опција које ће вам помоћи да боје подесите у складу са својим потребама.
color.ui
Програм Гит аутоматски боји већину свог исписа, али постоји главни прекидач који можете искористити уколико вам се овакав начин приказа не допада. Ако желите да искључите сав обојени излаз програма Гит на терминалу, урадите следеће:
$ git config --global color.ui false
Подразумевано подешавање је auto
и тада се излаз боји када се исписује директно на терминал, али не садржи контролне кодове боја када се излаз преусмерава у пајп или фајл.
Можете га поставити и на always
ако желите да се не прави разлика између терминала и пајпова.
Ово ћете ретко користити; у већини случајева, ако желите кодове за боје у преусмереном излазу, можете уместо тога Гит команди да проследите заставицу --color
чиме је приморавате да користи и кодове за боје.
Подразумевано подешавање је скоро увек оно што ће вам одговарати.
color.*
Ако желите да будете одређенији о томе које команде ће бити обојене и на који начин, програм Гит нуди посебна подешавања за боје.
Свака од ових се може подесити на true
, false
или always
.
color.branch color.diff color.interactive color.status
Сем тога, свака од ових има под-подешавања које можете употребити да поставите боју за делове излаза, ако желите да преиначите сваку боју.
На пример, да у diff
излазу мета информација буде исписана плавим словима на црној позадини, подебљаним словима, можете да извршите следеће:
$ git config --global color.diff.meta "blue black bold"
Боју можете да подесите на било коју од следећих вредности: normal
(како је подешен терминал), black
(црна), red
(црвена), green
(зелена), yellow
(жута), blue
(плава), magenta
(магента), cyan
(тиркизна), или white
(бела).
Ако желите да додате и атрибут као што је bold у претходном примеру, можете да изаберете неки од следећих: bold
(подебљано), dim
(пригушено), ul
(подвучено), blink
(трепери) и reverse
(замена боје текста и боје позадине).
Спољни алати за спајање и приказ разлика
Мада програм Гит има своју унутрашњу имплементацију програма diff, коју смо досад показивали у овој књизи, уместо њега можете да подесите и спољни алат. Можете да подесите и графички алат за разрешење конфликта при спајању, уместо да их ручно решавате. Приказаћемо подешавање Perforce Visual Merge Tool (P4Merge) за приказ разлика и решавање конфликата при спајању, пошто је добар графички алат и бесплатан је.
Ако желите да пробате ово, P4Merge ради на свим већим платформама и требало би да успете да га подесите.
Надаље ћемо користити имена путањи које раде на мекОС и Линуксу; за Виндоуз ћете морати да промените /usr/local/bin
на путању до извршног фајла у свом окружењу.
За почетак, преузмите P4Merge са Perforce сајта.
Затим ћете подесити спољне омотач-скрипте које ће покретати команде.
Користићемо мекОС путању за извршни фајл; у другим системима, он ће бити тамо где је инсталиран p4merge
бинарни фајл.
Подесите скрипту-омотач коју можете назвати extMerge
, која зове бинарни фајл заједно са свим прослеђеним аргументима:
$ cat /usr/local/bin/extMerge
#!/bin/sh
/Applications/p4merge.app/Contents/MacOS/p4merge $*
Омотач за приказ разлике проверава да ли је прослеђено седам аргумената и два од њих прослеђује скрипти за спајање. Програм Гит подразумевано прослеђује следеће аргументе програму за приказ разлика:
path old-file old-hex old-mode new-file new-hex new-mode
Пошто су потребни само аргументи old-file
и new-file
, користимо скрипту-омотач да проследимо само оне који нам требају.
$ cat /usr/local/bin/extDiff
#!/bin/sh
[ $# -eq 7 ] && /usr/local/bin/extMerge "$2" "$5"
Такође је потребно и да дозволимо извршавање ових алата:
$ sudo chmod +x /usr/local/bin/extMerge
$ sudo chmod +x /usr/local/bin/extDiff
Сада можете подесити конфигурациони фајл тако да се за решавање конфликта и преглед промена користе алати које сте направили.
За то је потребно поставити већи број подешавања: merge.tool
ће рећи програму Гит коју стратегију да користи, mergetool.<алат>.cmd
наводи како се команда извршава, mergetool.<алат>.trustExitCode
ће рећи програму Гит да ли излазни кôд програма говори о успешном решавању конфликта спајања или не, а diff.external
ће рећи програму Гит коју команду да покрене за приказ промена.
Дакле, можете или да покренете четири команде за конфигурацију:
$ git config --global merge.tool extMerge
$ git config --global mergetool.extMerge.cmd \
'extMerge \"$BASE\" \"$LOCAL\" \"$REMOTE\" \"$MERGED\"'
$ git config --global mergetool.extMerge.trustExitCode false
$ git config --global diff.external extDiff
или да измените фајл ~/.gitconfig
тако да додате следеће линије:
[merge]
tool = extMerge
[mergetool "extMerge"]
cmd = extMerge "$BASE" "$LOCAL" "$REMOTE" "$MERGED"
trustExitCode = false
[diff]
external = extDiff
Када све ово подесите, ако извршите команду за преглед разлика као што је ова:
$ git diff 32d1776b1^ 32d1776b1
Уместо да добијете излаз разлике у командној линији, програм Гит покреће P4Merge, који изгледа отприлике овако:
![P4Merge](png/p4merge.png)
Ако пробате да спојите две гране и као последицу тога добијете конфликте при спајању, можете извршити команду git mergetool
; она покреће P4Merge и дозвољава вам да решите конфликте у том ГКИ алату.
Добра ствар у вези ове поставке са омотачем је то што лако можете да промените алате за спајање и приказ разлика.
На пример, ако желите да промените алате extDiff
и extMerge
и подесите их тако да покрећу KDiff3, све што треба да урадите је да уредите extMerge
фајл:
$ cat /usr/local/bin/extMerge
#!/bin/sh
/Applications/kdiff3.app/Contents/MacOS/kdiff3 $*
Програм Гит ће сада користити алат KDiff3 за приказ промена и решавање конфликата при спајању.
Програм Гит се испоручује са великим бројем већ подешених осталих алата за разрешење конфликата при спајању за које не морате да подешавате конфигурацију из командне линије. Ако желите да видите листу алата који су подржани, пробајте ово:
$ git mergetool --tool-help
'git mergetool --tool=<tool>' may be set to one of the following:
emerge
gvimdiff
gvimdiff2
opendiff
p4merge
vimdiff
vimdiff2
The following tools are valid, but not currently available:
araxis
bc3
codecompare
deltawalker
diffmerge
diffuse
ecmerge
kdiff3
meld
tkdiff
tortoisemerge
xxdiff
Some of the tools listed above only work in a windowed
environment. If run in a terminal-only session, they will fail.
Ako програм KDiff3 ne želite da koristite za prikaz razlika, već samo za razrešenje konflikаta пти спајању, a komanda kdiff3
се налази на вашиј путањи, možete извршити sledeće:
$ git config --global merge.tool kdiff3
Ако извршите ово уместо да подешавате фајлове extMerge
и extDiff
, програм Гит ће користити KDiff3 за разрешење конфликата, а за приказ разлика уобичајени интерни Гит алат намењен за то.
Форматирање и празан простор
Проблеми са форматирањем и празним простором су неки од фрустрирајућих и суптилних проблема на које наилазе многи програмери који сарађују, поготово када не раде сви на истој платформи. Веома је лако да закрпе и други производи рада на којем се сарађује доведу то неприметних промена у празном простору белине јер их едитори уводе без обавештавања, а ако вам фајлове икад дотакне Виндоуз систем, можда ће се заменити њихови крајеви линија. Програм Гит има неколико конфигурационих опција које помажу код ових проблема.
core.autocrlf
Ако програмирате на Виндоузу и радите са људима који га не користе (или обрнуто), вероватно ћете у неком тренутку наићи на проблеме око крајева линија. Разлог за ово је што Виндоуз у својим фајловима за прелом реда користи два карактера: и CR (carriage-return) и LF (linefeed) док мекОС и Линукс системи користе само карактер LF. Ово је суптилна али изузетно фрустрирајућа чињеница рада на различитим платформама; многи едитори на Виндоузу без упозорења замењују постојеће крајеве редова у LF стилу са CRLF, или умећу оба карактера за прелом реда када корисник притисне тастер ентер.
Програм Гит ово може да обради аутоматским конвертовањем CRLF крајева линија у LF када додате фајл у индекс и обрнуто када одјављујете кôд у свој фајл систем.
Ову функционалност можете да укључити core.autocrlf
подешавањем.
Ако сте на Виндоуз машини, подесите га на true
— то ће конвертовати све LF у CRLF
када одјављујете кôд:
$ git config --global core.autocrlf true
Ако сте на Линукс или мекОС систему који користи LF крајеве линија, онда не желите да их програм Гит аутоматски конвертује када одјављујете фајлове; међутим, ако се случајно уведе фајл са CRLF крајевима линија, онда бисте можда желели да програм Гит то аутоматски исправи.
Програму Гит можете рећи да конвертује CRLF у LF када комитујете, али не и обрнуто тако што ћете опцију core.autocrlf
подесити на input
:
$ git config --global core.autocrlf input
С оваквим подешавањем ћете имати CRLF крајеве линија у Виндоуз одјављивањима, али LF крајеве линија на мекОС и Линукс системима и у репозиторијуму.
Ако сте Виндоуз програмер који ради на искључиво Виндоуз пројекту, ову функционалност можете да искључите, чувајући и CR карактере у репозиторијуму тако што ћете конфигурациону вредност поставити на false
:
$ git config --global core.autocrlf false
core.whitespace
Програм Гит може да открије и исправи неке од проблема са празним простором. Може да пронађе шест основна проблема са празним простором — три су подразумевано укључена и могу се искључити, а три су подразумевано искључена али се могу укључити.
Три која су подразумевано укључена су blank-at-eol
, што тражи размаке не крају линије; blank-at-eof
, што примећује празне редове на крају фајла; и space-before-tab
, што тражи размаке испред табова на почетку линије.
Три подразумевано искључена која се могу укључити су indent-with-non-tab
, што тражи линије које почињу размацима уместо табовима (и контролише се опцијом tabwidth
); tab-in-indent
, који надгледа табове у делу линије у којем је увлачење; и cr-at-eol
, које говори програму Гит да су CR карактери на крајевима линија у реду.
Програму Гит наводите које од ових желите да укључите тако што ћете поставите core.whietspace
на вредности које желите укључене или искључене, одвојене зарезима.
Опцију можете искључити тако што додате знак -
испред вредности, или користите њену подразумевану вредност тако што је уопште ни не наведете у стрингу подешавања.
На пример, ако желите да укључите све осим space-before-tab
, то можете урадити (уз то да је trailing-space
скраћеница која покрива и blank-at-eol
и blank-at-eof
):
$ git config --global core.whitespace \
trailing-space,-space-before-tab,indent-with-non-tab,tab-in-indent,cr-at-eol
Или можете да наведете само део који прилагођавате:
$ git config --global core.whitespace \
-space-before-tab,indent-with-non-tab,tab-in-indent,cr-at-eol
Програм Гит ће ове проблеме открити када извршите команду git diff
и пробаће да их обоји тако да их можда можете решити пре него што комитујете.
Такође ће користити ове вредности да вам помогне када примењујете закрпе командом git apply
.
Када примењујете закрпе, од програма Гит можете затражити да вас упозори ако примењује закрпе које имају наведене проблеме са празним простором:
$ git apply --whitespace=warn <закрпа>
Или можете наредити програму Гит да покуша аутоматски да реши проблеме пре него што примени закрпу:
$ git apply --whitespace=fix <закрпа>
Ове опције се такође примењују и на команду git rebase
.
Ако сте комитовали проблеме са празним простором, али их још нисте гурнули узводно, можете да извршите git rebase --whitespace=fix
и програм Гит ће аутоматски да исправи проблеме до поново исписује закрпе.
Конфигурација сервера
За серверску страну програма Гит не постоји ни приближно оволико конфигурационих опција, али има неколико занимљивих који бисте можда желели да запамтите.
receive.fsckObjects
Програм Гит може обезбедити да се сваки објекат примљен током гурања и даље подудара са својом SHA-1 контролном сумом и показује на важеће објекте.
Ипак, он то подразумевано не ради; рачунање контролне суме је прилично скупа операција и може да успори извршавање, поготово на великим репозиторијума или при гурању велике количине података.
Ако желите да програм Гит проверава конзистентност објеката приликом сваког гурања, можете га приморати на то тако што ћете поставити receive.fsckObjects
на true
:
$ git config --system receive.fsckObjects true
Сада ће програм Гит проверити интегритет репозиторијума пре него што се свако гурање промена прихвати да би се обезбедило да неисправни (или злонамерни) клијенти не уносе неисправне податке.
receive.denyNonFastForwards
Ако ребазирате комитове које сте већ гурнули и онда покушате поново да их гурнете, или на неки други начин покушате да гурнете комит на удаљену грану који не садржи комит на који тренутно показује удаљена грана, та операција вам неће бити одобрена.
Ово је у општем случају добра полиса; али у случају ребазирања, можете одлучити да знате шта радите и својој команди гурања проследити заставицу -f
, чиме принудно ажурирате удаљену грану.
Ако програму Git желите наложити da odbija принудна guranjа, poставите receive.denyNonFastForwards
:
$ git config --system receive.denyNonFastForwards true
Други начин на који ово можете урадити на страни сервера јесте помоћу кука на серверској страни, што ћемо обрадити ускоро. Такав приступ вам нуди могућност да урадите и неке сложеније ствари као што је одбијање спајања која не користе технику брзог премотавања унапред само одређеном подскупу корисника.
receive.denyDeletes
Један од начина да се заобиђе denyNonFastForwards
полиса је да корисник обрише грану, па да је онда поново гурне узводно са новом референцом.
Да бисте и ово онемогућили, поставите receive.denyDeletes
на true
.
$ git config --system receive.denyDeletes true
Ово одбија било какво брисање грана или ознака — то не може да ради ниједан корисник. Ако желите да уклоните удаљене гране, морате ручно да обришете фајлове референци са сервера. Такође постоје и занимљивији начини да се ово уради на нивоу корисника преко ACL листи, као што ћете научити у Пример полисе коју спроводи програм Гит.