-
1. Pagsisimula
-
2. Mga Pangunahing Kaalaman sa Git
-
3. Pag-branch ng Git
-
4. Git sa Server
- 4.1 Ang Mga Protokol
- 4.2 Pagkuha ng Git sa isang Server
- 4.3 Ang paglikha ng iyong Pampublikong Susi ng SSH
- 4.4 Pag-Setup ng Server
- 4.5 Git Daemon
- 4.6 Smart HTTP
- 4.7 GitWeb
- 4.8 GitLab
- 4.9 Mga Opsyon ng Naka-host sa Third Party
- 4.10 Buod
-
5. Distributed Git
- 5.1 Distributed Workflows
- 5.2 Contributing to a Project
- 5.3 Maintaining a Project
- 5.4 Summary
-
6. GitHub
-
7. Mga Git na Kasangkapan
- 7.1 Pagpipili ng Rebisyon
- 7.2 Staging na Interactive
- 7.3 Pag-stash at Paglilinis
- 7.4 Pag-sign sa Iyong Trabaho
- 7.5 Paghahanap
- 7.6 Pagsulat muli ng Kasaysayan
- 7.7 Ang Reset Demystified
- 7.8 Advanced na Pag-merge
- 7.9 Ang Rerere
- 7.10 Pagdebug gamit ang Git
- 7.11 Mga Submodule
- 7.12 Pagbibigkis
- 7.13 Pagpapalit
- 7.14 Kredensyal na ImbakanCredential Storage
- 7.15 Buod
-
8. Pag-aangkop sa Sariling Pangangailagan ng Git
- 8.1 Kompigurasyon ng Git
- 8.2 Mga Katangian ng Git
- 8.3 Mga Hook ng Git
- 8.4 An Example Git-Enforced Policy
- 8.5 Buod
-
9. Ang Git at iba pang mga Sistema
- 9.1 Git bilang isang Kliyente
- 9.2 Paglilipat sa Git
- 9.3 Buod
-
10. Mga Panloob ng GIT
- 10.1 Plumbing and Porcelain
- 10.2 Git Objects
- 10.3 Git References
- 10.4 Packfiles
- 10.5 Ang Refspec
- 10.6 Transfer Protocols
- 10.7 Pagpapanatili At Pagbalik ng Datos
- 10.8 Mga Variable sa Kapaligiran
- 10.9 Buod
-
A1. Appendix A: Git in Other Environments
- A1.1 Grapikal Interfaces
- A1.2 Git in Visual Studio
- A1.3 Git sa Eclipse
- A1.4 Git in Bash
- A1.5 Git in Zsh
- A1.6 Git sa Powershell
- A1.7 Summary
-
A2. Appendix B: Pag-embed ng Git sa iyong Mga Aplikasyon
- A2.1 Command-line Git
- A2.2 Libgit2
- A2.3 JGit
-
A3. Appendix C: Mga Kautusan ng Git
- A3.1 Setup at Config
- A3.2 Pagkuha at Paglikha ng Mga Proyekto
- A3.3 Pangunahing Snapshotting
- A3.4 Branching at Merging
- A3.5 Pagbabahagi at Pagbabago ng mga Proyekto
- A3.6 Pagsisiyasat at Paghahambing
- A3.7 Debugging
- A3.8 Patching
- A3.9 Email
- A3.10 External Systems
- A3.11 Administration
- A3.12 Pagtutuberong mga Utos
10.8 Mga Panloob ng GIT - Mga Variable sa Kapaligiran
Mga Variable sa Kapaligiran
Laging tumatakbo ang Git sa loob ng isang bash shell, at gumagamit ng isang bilang ng mga variable ng kapaligiran ng shell upang matukoy kung paano ito kumikilos. Paminsan-minsan, ito ay madaling gamitin upang malaman kung ano ang mga ito, at kung paano sila maaaring magamit upang gawing kumilos ang Git sa paraang gusto mo. Ito ay hindi isang malawakan na listahan ng lahat ng mga variable ng kapaligiran Git ay binabayaran ng pansin, ngunit tutugunan namin ang pinakamahalaga.
Ugali ng Global
Ang ilan sa pangkalahatang pag-uugali ng Git bilang isang programa sa computer ay nakadepende sa mga variable ng kapaligiran.
Tinutukoy ng *`GIT_EXEC_PATH`* kung saan hinahanap ng Git ang mga sub-program (tulad ng 'git-commit', 'git-diff', at iba pa). Maaari mong suriin ang kasalukuyang setting sa pamamagitan ng pagtakbo ng `git -exec-path`.
Ang *`HOME`* ay hindi karaniwang itinuturing na napapasadyang (masyadong maraming iba pang mga bagay na nakasalalay dito), ngunit ito ay kung saan hinahanap ng Git ang pandaigdigang configuration file. Kung nais mo ang isang tunay na portable na pag-install ng Git, kumpleto sa pandaigdigang pagsasaayos,ang `HOME` ay maaari mong i-override sa profile ng shell ng portable Git.
Ang *`PREFIX`* ay katulad, ngunit para sa pagsasaayos ng buong sistema. Tinitingnan ng Git ang file na ito sa `$ PREFIX / etc / gitconfig`.
Ang *`GIT_CONFIG_NOSYSTEM`*, kung nakatakda, ay hindi pinapagana ang paggamit ng buong file na configuration ng system. Ito ay kapaki-pakinabang kung ang config ng iyong system ay nakakasagabal sa iyong mga utos, ngunit wala kang access upang baguhin o alisin ito.
Kinokontrol ng GIT_PAGER
ang programang ginagamit upang ipakita ang output ng multi-page sa command line. Kung ito ay hindi naka-set, ang PAGER
ay gagamitin bilang fallback.
Ang GIT_EDITOR
ay ilulunsad ng editor Git kapag kailangan ng user na i-edit ang ilang teksto (isang mensahe ng gumawa, halimbawa). Kung hindi magamit, ang EDITOR
ay gagamitin.
Mga Lokasyon ng Repository
Gumagamit ang Git ng maraming mga variable ng kapaligiran upang matukoy kung paano ito nakikipag-ugnayan sa kasalukuyang repository.
Ang GIT_DIR
ay ang lokasyon ng .git na folder. Kung hindi ito tinukoy, ang Git ay naglalakad sa puno ng direktoryo hanggang sa nakakakuha ito sa ~
o /
, naghahanap ng isang .git na direktoryo sa bawat hakbang.
Kinokontrol ng GIT_CEILING_DIRECTORIES
ang pag-uugali ng paghahanap sa isang .git na direktoryo. Kung ma-access mo ang mga direktoryo na mabagal na i-load (tulad ng mga nasa isang tape drive, o sa isang mabagal na koneksyon sa network), maaaring gusto mong huminto ang Git na sinusubukan nang mas maaga kaysa sa kung hindi man, lalo na kung ang Git ay mahihingi kapag ang pagtatayo ng iyong shell prompt .
Ang GIT_WORK_TREE
ay ang lokasyon ng ugat ng direktoryo ng nagtatrabaho para sa isang di-hubad lalagyan. Kung ang - git-dir o GIT_DIR ay tinukoy ngunit wala sa - gawa-puno, GIT_WORK_TREE at core.worktree ay tinukoy, ang kasalukuyang gumaganang direktoryo ay itinuturing na ang pinakamataas na antas ng iyong gumaganang puno.
Ang GIT_INDEX_FILE
ay ang landas sa index na file (hindi naiiwan lamang na mga repositoryo).
Maaaring gamitin ang GIT_OBJECT_DIRECTORY
upang tukuyin ang lokasyon ng direktoryo na kadalasang namamalagi sa .git / mga bagay.
Ang GIT_ALTERNATE_OBJECT_DIRECTORIES
ay isang listahan na pinaghihiwalay ng colon (na-format tulad ng / dir / isa: / dir / two: …) na nagsasabi sa Git kung saan mag-check para sa mga bagay kung wala sila sa GIT_OBJECT_DIRECTORY. Kung mangyari mong magkaroon ng maraming mga proyekto na may malalaking file na may eksaktong parehong mga nilalaman, maaari itong magamit upang maiwasan ang pag-iimbak ng napakaraming mga kopya ng mga ito.
Mga Pathspec
Ang isang ``pathspec`` ay tumutukoy sa kung paano mo tinukoy ang mga landas sa mga bagay sa Git, kabilang ang paggamit ng mga wildcard. Ang mga ito ay ginagamit sa .gitignore
na file, ngunit din sa command-line ('git add * .c).
Kinokontrol ng GIT_GLOB_PATHSPECS`at `GIT_NOGLOB_PATHSPECS
ang default na pag-uugali ng mga wildcard sa mga pathspec. Kung ang GIT_GLOB_PATHSPECS ay nakatakda sa 1, ang mga karakter na wildcard ay kumikilos bilang mga wildcard (na siyang default); kung ang GIT_NOGLOB_PATHSPECS ay naka-set sa 1, ang mga wildcard na character ay tumutugma lamang sa kanilang sarili, ibig sabihin isang bagay na tulad ng .c ay tumutugma lamang sa isang file na pinangalanan .c '', sa halip na anumang file na ang pangalan ay nagtatapos sa
.c. Maaari mong i-override ito sa mga indibidwal na kaso sa pamamagitan ng pagsisimula ng pathspec sa: (glob) o: (literal), tulad ng sa: (glob) *. C.
Ang GIT_LITERAL_PATHSPECS
ay hindi pinapagana ang parehong mga pag-uugali sa itaas; walang mga wildcard character ang gagana, at ang mga prefix na override ay hindi pinagana.
Ang GIT_ICASE_PATHSPECS
ay nagtatakda ng lahat ng mga pathspec na magtrabaho sa isang case-insensitive na paraan.
Nagsasagawa
Ang pangwakas na paglikha ng isang Git na bagay na gagawin ay kadalasang ginagawa ng git-commit-tree, na gumagamit ng mga variable ng kapaligiran na ito bilang pangunahing pinagmumulan ng impormasyon, na bumabalik sa mga halaga ng configuration lamang kung wala ito.
Ang GIT_AUTHOR_NAME
ay ang pangalan ng tao na nababasa sa field ng `` may-akda``.
Ang GIT_AUTHOR_EMAIL
ay ang email para sa field ng `` may-akda``.
Ang GIT_AUTHOR_DATE
ay ang timestamp na ginamit para sa field ng `` may-akda '.
Itinatakda ng GIT_COMMITTER_NAME
ang pangalan ng tao para sa field ng `` commiter '.
Ang GIT_COMMITTER_EMAIL
ay ang email address para sa patlang na ‘` committer '’.
Ginagamit ang GIT_COMMITTER_DATE
para sa timestamp sa patlang na ‘` commiter '’.
Ang EMAIL
ay ang email address ng fallback kung ang halaga ng configuration ng user.email ay hindi nakatakda. Kung hindi ito nakatakda, ang Git ay babalik sa mga gumagamit ng system at mga pangalan ng host.
Networking
Ginagamit ng Git ang curl
library upang magawa ang mga pagpapatakbo ng network sa HTTP, kaya GIT_CURL_VERBOSE
ay nagsasabi sa Git na humalimuyak ang lahat ng mga mensahe na binuo ng library na iyon. Ito ay katulad ng paggawa ng curl -v
sa command line.
Ang GIT_SSL_NO_VERIFY
ay nagsasabi sa Git na huwag i-verify ang mga sertipiko ng SSL. Minsan ito ay kinakailangan kung gumagamit ka ng self-signed certificate upang maghatid ng mga repository ng Git sa HTTPS, o ikaw ay nasa gitna ng pag-set up ng isang Git server ngunit hindi pa naka-install ang buong certificate.
Kung ang rate ng data ng isang pagpapatakbo ng HTTP ay mas mababa kaysa sa GIT_HTTP_LOW_SPEED_LIMIT byte bawat segundo para sa mas mahaba kaysa sa GIT_HTTP_LOW_SPEED_TIME
na mga segundo, Git ay buburahin ang operasyon na iyon. Ang mga halagang ito ay pinapalitan ang http.lowSpeedLimit at http.lowSpeedTime na mga halaga ng configuration.
Itinatakda ng GIT_HTTP_USER_AGENT
ang string ng user-agent na ginagamit ng Git kapag nakikipag-usap sa HTTP. Ang default ay isang halaga tulad ng 'git / 2.0.0`.
Diffing at Pagsasama
Ang GIT_DIFF_OPTS
ay isang bit ng isang maling pangalan. Ang tanging balidong halaga ay -u <n> o --unified = <n>, na kumokontrol sa bilang ng mga linya ng konteksto na ipinapakita sa isang git diff na utos.
Ginagamit ang GIT_EXTERNAL_DIFF
bilang isang override para sa halaga ng diff.external configuration. Kung ito ay naka-set, Git ay tatawagin ang program na ito kapag ang git diff
ay nananawagan.
Ang GIT_DIFF_PATH_COUNTER
at GIT_DIFF_PATH_TOTAL
ay kapaki-pakinabang mula sa loob ng program na tinukoy ng GIT_EXTERNAL_DIFF
o diff.external
. Ang dating kumakatawan sa kung saan ang file sa isang serye ay diffed (simula sa 1), at ang huli ay ang kabuuang bilang ng mga file sa batch.
Kinokontrol ng GIT_MERGE_VERBOSITY
ang output para sa rekursibong pagsasanib na diskarte. Ang mga pinahihintulutang halaga ay ang mga sumusunod
*0 ay walang output, maliban posibleng isang solong mensahe ng error.
*1 ay nagpapakita lamang ng mga salungatan.
*2 ay nagpapakita rin ng mga pagbabago sa file.
*3 ay nagpapakita kung kailan lumaktaw ang mga file dahil hindi sila nagbago.
*4 ay nagpapakita ng lahat ng landas habang pinoproseso ang mga ito.
*5 at sa itaas ay nagpapakita ng detalyadong impormasyon sa pag-debug.
Ang default na halaga ay 2.
Pag-debug
Gustong malaman kung ano talaga ang Git? Ang Git ay may isang kumpletong kumpletong hanay ng mga bakas na naka-embed, at ang kailangan mong gawin ay i-on ito. Ang mga posibleng halaga ng mga variable na ito ay ang mga sumusunod:
*‘`true``, 1 ’, o `` 2 ' - ang kategorya ng bakas ay isinulat sa stderr. *Isang ganap na landas na nagsisimula sa / - ang bakas na output ay isusulat sa file na iyon.
Kinokontrol ng GIT_TRACE ang mga pangkalahatang bakas, na hindi magkasya sa anumang partikular na kategorya. Kabilang dito ang pagpapalawak ng mga alyas, at pagtatalaga sa iba pang mga sub-program.
$ 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'
Kinokontrol ng GIT_TRACE_PACK_ACCESS ang pagsunod sa pag-access sa packfile. Ang unang field ay ang accessfile na na-access, ang pangalawang ay ang offset sa loob ng file na iyon:
$ 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
Kinokontrol ng GIT_TRACE_PACK_ACCESS
ang pagsunod sa pag-access sa packfile. Ang unang field ay ang accessfile na na-access, ang pangalawang ay ang offset sa loob ng file na iyon:
$ 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
# […]
Kinokontrol ng GIT_TRACE_PERFORMANCE
ang pag-log ng data ng pagganap. Ang output ay nagpapakita kung gaano katagal ang bawat partikular na invocation git
tumatagal.
$ 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'
Ang GIT_TRACE_SETUP
ay nagpapakita ng impormasyon tungkol sa kung ano ang natutuklasan ng Git tungkol sa imbakan at kapaligiran na nakikipag-ugnay sa.
$ 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
Miscellaneous
Ang GIT_SSH
, kung tinukoy, ay isang programa na hinihiling sa halip na ssh kapag sinusubukan ng Git na kumonekta sa isang SSH host. Ito ay tinatawag na $ GIT_SSH [username @] host [-p <port>] <command>. Tandaan na hindi ito ang pinakamadaling paraan upang i-customize kung paano ang tawag ay ssh; ito ay hindi sumusuporta sa dagdag na mga parameter ng command line, kaya kailangan mong magsulat ng balot script at itakda ang GIT_SSH upang ituro ito. Marahil ay madali lang gamitin ang ~ / .ssh / config na file para sa na.
Ang GIT_ASKPASS
ay isang override para sa halaga ng configuration ng core.askpass. Ito ang programa na sinasabihan tuwing kailangan ng Git na tanungin ang gumagamit para sa mga kredensyal, na maaaring umasa ng isang text prompt bilang argumento ng command-line, at dapat ibalik ang sagot sa stdout
. (Tingnan ang _git_tools.asc para sa higit pa sa subsystem na ito.)
Kinokontrol ng GIT_NAMESPACE
ang pag-access sa mga ref para sa namespaced, at katumbas ng --namespace na bandila. Ito ay halos kapaki-pakinabang sa gilid ng server, kung saan maaari mong iimbak ang maraming mga forks ng isang repository sa isang repositoryo, tanging pinapanatiling hiwalay ang mga ref.
Maaaring gamitin ang GIT_FLUSH
upang pilitin ang Git na gamitin ang di-buffered I / O kapag sumusulat nang incrementally sa stdout. Ang isang halaga ng 1 ay nagiging sanhi ng Git upang mapaliit nang mas madalas, ang isang halaga ng 0 ay nagiging sanhi ng lahat ng output na buffered. Ang default na halaga (kung hindi nakatakda ang variable na ito) ay pumili ng naaangkop na buffering scheme depende sa aktibidad at output mode.
Ang GIT_REFLOG_ACTION
ay nagbibigay-daan sa iyong tukuyin ang mapaglarawang teksto na nakasulat sa reflog. Narito ang isang halimbawa:
$ 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