A Git kimliği işlemek her önemli şey bir SHA-1 hash olduğunu taahhüt. Hepsini listelemiyorum, ama işte önemli olanlar ...
- Sadece içerik değil, içerik.
- Gönderme tarihi.
- Committer adı ve e-posta adresi.
- Günlüğü mesaj.
- önceki ID (ler) işlemek.
Değişim hiçbirini ve taahhüt kimliği değişir. Ve evet, aynı özelliklerle aynı işlem, farklı bir makinede aynı kimliğe sahip olacaktır. Bu üç amaca hizmet eder. Birincisi, sistemin bir taahhütte bulunup bulunmadığını söyleyebilmesi anlamına gelir. Mimariye doğru fırında.
İkincisi, tek hızla karşılaştırabilirsiniz sadece kendi kimliklerine bakarak taahhüt. Bu, Git'in ağ protokollerini çok verimli hale getirir. Aynı olup olmadığını görmek için iki işi karşılaştırmak ister misiniz? Bütün farklılığı göndermek zorunda değilsiniz, sadece kimlikleri gönderin.
Üçüncüsü, ve bu da aynı kimlikle aynı kimliğe sahip iki aynı işi paylaşıyor. Bu yüzden önceki işlemlerin kimliği karmanın bir parçası. Bir taahhüdün içeriği aynıysa ancak ebeveynler farklıysa, taahhüt kimliği farklı olmalıdır. Bu, depoları (bir itme veya çekme gibi) karşılaştırırken, Git denetimini durdurabilen iki havuz arasında ortak bir taahhüt bulduğunda karşılaştırır. Bu, itme ve çekme işlemini son derece verimli hale getirir. Örneğin ...
origin
A - B - C - D - E [master]
A - B [origin/master]
git fetch origin
için ağ konuşma böyle bir şey ...
local
Hey kökeni, ne dallar var gider? -E
local
Ben E bulunmadığı en master var
origin
, ben B. adresinden usta
origin
B diyorsunuz var? Bende B var ve E.'nin atası. Size C, D ve E gönderelim.
Ayrıca, rebase ile yapılan bir işlemi yeniden yazdığınızda, her şey değiştikten sonra bu yüzden de. İşte bir örnek.
A - B - C - D - E - F - G [master]
Şimdi, az önce günlük mesaj biraz değiştirmek, D yeniden varsayalım. Artık D artık D olamaz, D1'i arayacağımız yeni bir işleme kopyalanması gerekir.
A - B - C - D - E - F - G [master]
\
D1
D1 onun ebeveyn olarak C (C etkilenmez çocuklarını bilmiyorum taahhüt) o E, F, G bağlantısı kesildiğinde sahip olabilmelerine rağmenE'nin ebeveyni D1'e değiştirirsek, E artık E olamaz. Yeni bir taahhüt E1'e kopyalanması gerekiyor.
A - B - C - D - E - F - G [master]
\
D1 - E1
ve böylece F F1 ve G G1
.
A - B - C - D - E - F - G
\
D1 - E1 - F1 - G1 [master]
Hepsi aynı kodu, sadece farklı anne (veya D1 durumunda olduğu, farklı bir taahhüt mesajı) var.
Bkz. Http://git-scm.com/book/en/v2/Getting-Started-Git-Basics#Git-Has-Integrity – Jubobs
Neden inandığınızdan emin değilsiniz. Bu konuyu çok ilginç buluyorum. –