-
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
7.4 Mga Git na Kasangkapan - Pag-sign sa Iyong Trabaho
Pag-sign sa Iyong Trabaho
Ang Git ay cryptographically na ligtas, ngunit hindi ito foolproof. Kung ikaw ay kumukuha ng trabaho mula sa iba sa internet at gusto mong mapatunayan na ang mga commit ay talagang mula sa isang pinagkakatuwalaan na pinagkukunan, ang Git ay may ilang mga paraan upang mag-sign at mapatunayan ang trabaho gamit ang GPG.
Ang Panimula sa GPG
Una sa lahat, kung gusto mong mag-sign ng anuman ang iyong kailangan upang makuha ang GPG na naka-configure at iyong personal na susi ay naka-install.
$ gpg --list-keys
/Users/schacon/.gnupg/pubring.gpg
---------------------------------
pub 2048R/0A46826A 2014-06-04
uid Scott Chacon (Git signing key) <schacon@gmail.com>
sub 2048R/874529A9 2014-06-04
Kung wala kang susi na naka-install, maaari kang bumuo ng isa gamit ang gpg --gen-key
.
gpg --gen-key
Sa sandaling meron kang isang pribado na susi upang mag-sign, maaari kang mag-configure ng Git na gamitin ito para sa pag-sign ng mga bagay sa pamamagitan ng setting sa user.signingkey
config na setting.
git config --global user.signingkey 0A46826A
Ngayon ang git ay gagamit ng iyong susi sa pamamagitan ng default upang i-sign ang mga tag at mga commit kung gusto mo.
Pag-sign ng mga Tag
Kung ikaw ay mayroong isang GPG na pribadong susi na setup, maaari mo nang gamitin ngayon ito sa pag-sign ng bagong mga tag.
Ang dapat mong gawin ay gamitin ang -s
sa halip na -a
:
$ git tag -s v1.5 -m 'my signed 1.5 tag'
You need a passphrase to unlock the secret key for
user: "Ben Straub <ben@straub.cc>"
2048-bit RSA key, ID 800430EB, created 2014-05-04
Kung ikaw ay magpatakbo ng git show
sa tag na iyon, maaari mong makita ang iyong GPG na pirma na nakalakip dito:
$ git show v1.5
tag v1.5
Tagger: Ben Straub <ben@straub.cc>
Date: Sat May 3 20:29:41 2014 -0700
my signed 1.5 tag
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1
iQEcBAABAgAGBQJTZbQlAAoJEF0+sviABDDrZbQH/09PfE51KPVPlanr6q1v4/Ut
LQxfojUWiLQdg2ESJItkcuweYg+kc3HCyFejeDIBw9dpXt00rY26p05qrpnG+85b
hM1/PswpPLuBSr+oCIDj5GMC2r2iEKsfv2fJbNW8iWAXVLoWZRF8B0MfqX/YTMbm
ecorc4iXzQu7tupRihslbNkfvfciMnSDeSvzCpWAHl7h8Wj6hhqePmLm9lAYqnKp
8S5B/1SSQuEAjRZgI4IexpZoeKGVDptPHxLLS38fozsyi0QyDyzEgJxcJQVMXxVi
RUysgqjcpT8+iQM1PblGfHR4XAhuOqN5Fx06PSaFZhqvWFezJ28/CLyX5q+oIVk=
=EFTF
-----END PGP SIGNATURE-----
commit ca82a6dff817ec66f44342007202690a93763949
Author: Scott Chacon <schacon@gee-mail.com>
Date: Mon Mar 17 21:52:11 2008 -0700
changed the version number
Pag-verify na mga Tag
Para i-verify ang isang nakapirmang tag, gamitin mo ang git tag -v <tag-name>
.
Ang utos na ito ay gumagamit ng GPG upang i-verify ang pirma.
Kailangan mo ng taga-sign na pampublikong susi sa iyong keyring para dito upang gumana ng maayos:
$ git tag -v v1.4.2.1
object 883653babd8ee7ea23e6a5c392bb739348b1eb61
type commit
tag v1.4.2.1
tagger Junio C Hamano <junkio@cox.net> 1158138501 -0700
GIT 1.4.2.1
Minor fixes since 1.4.2, including git-mv and git-http with alternates.
gpg: Signature made Wed Sep 13 02:08:25 2006 PDT using DSA key ID F3119B9A
gpg: Good signature from "Junio C Hamano <junkio@cox.net>"
gpg: aka "[jpeg image of size 1513]"
Primary key fingerprint: 3565 2A26 2040 E066 C9A7 4A7D C0C6 D9A4 F311 9B9A
Kung ikaw ay walang pampublikong susi ng taga-sign, makakuha ka ng isang bagay na tulad nito sa halip:
gpg: Signature made Wed Sep 13 02:08:25 2006 PDT using DSA key ID F3119B9A
gpg: Can't check signature: public key not found
error: could not verify the tag 'v1.4.2.1'
Pag-sign ng mga Commit
Sa mas kamakailan na mga bersyon ng Git (v1.7.9 at pataas), maaari mo na ring ngayon mag-sign ng indibidwal na mga commit.
Kung ikaw ay interesado sa pag-sign ng mga commit na direkta sa halip na mga tag lamang, ang kailangan mo lang gawin ay idagdag ang -S
sa iyong git commit
na utos.
$ git commit -a -S -m 'signed commit'
You need a passphrase to unlock the secret key for
user: "Scott Chacon (Git signing key) <schacon@gmail.com>"
2048-bit RSA key, ID 0A46826A, created 2014-06-04
[master 5c3386c] signed commit
4 files changed, 4 insertions(+), 24 deletions(-)
rewrite Rakefile (100%)
create mode 100644 lib/git.rb
Para tingnan at i-verify ang mga pirma na ito, mayroon ding isang --show-signature
na opsyon sa git log
.
$ git log --show-signature -1
commit 5c3386cf54bba0a33a32da706aa52bc0155503c2
gpg: Signature made Wed Jun 4 19:49:17 2014 PDT using RSA key ID 0A46826A
gpg: Good signature from "Scott Chacon (Git signing key) <schacon@gmail.com>"
Author: Scott Chacon <schacon@gmail.com>
Date: Wed Jun 4 19:49:17 2014 -0700
signed commit
Bukod pa dito, maaari mong i-configure ang git log
upang tingnan ang anumang mga pirma na makikita at ilista sila sa kanilang output na may %G?
na format.
$ git log --pretty="format:%h %G? %aN %s"
5c3386c G Scott Chacon signed commit
ca82a6d N Scott Chacon changed the version number
085bb3b N Scott Chacon removed unnecessary test code
a11bef0 N Scott Chacon first commit
Dito makikita natin na ang mga pinakabagong commit lamang ang naka-sign at balido at ang nakaraang mga commit ay hindi.
Sa git 1.8.3 at pataas, ang git merge
at git pull
ay maaaring magsabi upang siyasatin at tanggihan kapag nag-merge ng commit na hindi nagdadala ng isang pinagkakatiwalang GPG na pirma na may --verify-signatures
na utos.
Kung gamitin mo ang opsyon na ito kapag nag-merge ng branch at ito ay naglalaman ng mga commit na hindi naka-sign at balido, ang merge ay hindi gagana.
$ git merge --verify-signatures non-verify
fatal: Commit ab06180 does not have a GPG signature.
Kung ang merge ay naglalaman lamang ng balido na naka-sign na mga commit, ang merge na utos ay nagpapakita sa iyo ng lahat ng mga pirma na sinuri nito at pagkatapos ay sumulong na may merge.
$ git merge --verify-signatures signed-branch
Commit 13ad65e has a good GPG signature by Scott Chacon (Git signing key) <schacon@gmail.com>
Updating 5c3386c..13ad65e
Fast-forward
README | 2 ++
1 file changed, 2 insertions(+)
Maaari mo ring gamitin ang -S
na opsyon na may git merge
na utos upang pirmahan ang nagreresultang merge na commit mismo.
Ang sumusunod na halimbawa ay parehong nagpapatunay na ang bawat commit sa branch na imi-merge ay nakapirma at saka ang mga pirma na nagreresulta ng merge commit.
$ git merge --verify-signatures -S signed-branch
Commit 13ad65e has a good GPG signature by Scott Chacon (Git signing key) <schacon@gmail.com>
You need a passphrase to unlock the secret key for
user: "Scott Chacon (Git signing key) <schacon@gmail.com>"
2048-bit RSA key, ID 0A46826A, created 2014-06-04
Merge made by the 'recursive' strategy.
README | 2 ++
1 file changed, 2 insertions(+)
Bawat Tao ay Dapat Mag-sign
Pag-sign ng mga tag at mga commit ay malaki, ngunit kung magpasya ka ng gamitin ito sa iyong normal na workflow, kailangan mong tiyakin na ang lahat sa iyong koponan ay naiitindihan kung paano gawin ito. Kung hindi, ikaw ay mapupunta sa pagtatagal ng paggamit sa oras sa pagtulong ng tao kung papaano mag-rewrite ng kanilang mga commit na may naka-sign na mga bersyon. Siguraduhin mo na naiitindihan mo ang GPG at ang mga benepisyo ng pag-sign ng mga bagay bago gamitin ito bilang bahagi ng iyong standard na workflow.