Git´æ´¢Ä¿Â¼½á¹¹
ÔÚ³õʼ»¯ÏîÄ¿²Ö¿âʱ£¨git clone »ògit init£©£¬Git»áÔÚ¸ùĿ¼Ï´´½¨Ò»¸ö.gitĿ¼£¬ÆäÏ´æ·Å×ÅGit²Ù×÷ºÍ´æ´¢Ïà¹ØµÄÄÚÈÝ£¬¸ÃĿ¼½á¹¹´óÖÂÈçÏ£º

ÈçͼÖÐËùÊö£º
HEADÎļþÖ¸Ïòµ±Ç°·ÖÖ§£»
indexÎļþ´æ´¢×ÅÔÝ´æÇøµÄÄÚÈÝÐÅÏ¢£»
refsĿ¼´æ´¢×ÅËùÓзÖÖ§Ö¸Ïò¸÷×ÔÌá½»¶ÔÏóµÄÖ¸Õ룻
objectsĿ¼´æ´¢×ÅGitÊý¾Ý¿âµÄËùÓÐÄÚÈÝ£»
configÎļþ°üº¬ÏîÄ¿µÄÅäÖÃÐÅÏ¢£»
infoĿ¼ÏµÄexcludeÎļþ°üº¬ÏîĿȫ¾ÖºöÂÔÆ¥Åäģʽ£¬Óë.gitignoreÎļþ»¥²¹£»
hooksĿ¼Ôò´æ·ÅÏîÄ¿µÄ¿Í»§¶Ë»ò·þÎñ¶Ë¹³×ӽű¾¡£
×¢£ºÆäÖеÄORIG_HEAD¼Ç¼µÄÊÇÔÚ½øÐм«¶Ë£¨drastic£©²Ù×÷£¨ÈçºÏ²¢merge£¬»ØÍËresetµÈ£©Ê±£¬´Ë²Ù×÷֮ǰHEADËùÖ¸ÏòµÄλÖ㬱ãÓÚÎÒÃÇÔÚ·¢Éú»ÙÃðÐÔʧÎóʱ½øÐлØÍË£¬ÈçʹÓÃ
git reset --hard ORIG_HEADÖ¸Áî¿ÉÒÔ»ØÍ˵½Î£ÏÕ²Ù×÷֮ǰµÄ״̬£¬µ«ÊǶÔÓÚÕý³£µÄÌá½»²Ù×÷£¬¸ÃÖ¸ÕëÊDz»»á±ä»¯µÄ¡£ÔÚ1.8.5°æ±¾ÒÔºó£¬GitʹÓÃÁËÁ´±í¼Ç¼HEADµÄËùÓÐÒÆ¶¯¹ì¼££¬
¿ÉÒÔʹÓÃgit reflog²é¿´£¬Ê¹ÓÃgit reset HEAD@{num}·½Ê½¿ÉÒÔ»ØÍ˵½Ö¸¶¨°æ±¾£¬ÕâÒ²ÊÇÖ®ºó½éÉÜGitÊý¾Ý»Ö¸´½«Òª½éÉܵÄÒ»¸öÖ¸Áî£¬ÍÆ¼öʹÓÃÕâÖÖ·½Ê½Ìæ´úORIG_HEAD·½Ê½¡£
¸ü¶àÐÅÏ¢¿É²Î¿¼´Ë´¦
Git´æ´¢
GitÊÇÒ»¸öÄÚÈÝѰַÎļþϵͳ(content-addressed filesystem)£¬Æä´æ´¢ÄÚÈݶ¼ÊÇͨ¹ýÄÚÈݵØÖ·Î¬»¤£¬¿ÉÒÔ°ÑËüÀí½â³ÉÒ»¸ö¼üÖµ¶Ô´æ´¢·½Ê½£º¼´¸ø¶¨Ò»¸ö´æ´¢Îļþ£¬¸Ãϵͳ¸ù¾ÝÎļþÐÅÏ¢ºÍÄÚÈÝ£¬Ê¹ÓÃSHA-1Ëã·¨¼ÆË㣬·µ»ØÒ»¸öÓÉ40¸öÊ®Áù½øÖÆ×Ö·û×é³ÉµÄ×Ö·û´®£¬Ö®ºóÖ»ÐèҪͨ¹ý¸Ã×Ö·û´®¼´¿É·ÃÎʸÃÎļþ£¬Õâ¸ö×Ö·û´®¾ÍÊÇGitÖÐͨ³£Ëù˵µÄУÑéºÍ¡£
ÄÚÈÝѰַ
ÔÚÁ˽âGitÄÚ²¿´æ´¢ÔÀí֮ǰÎÒÃÇÏÈÁ˽âÏÂÄÚÈÝѰַ£º
When being contrasted with content-addressed storage, a typical local or networked storage device is referred to as location-addressed. In a location-addressed storage device, each element of data is stored onto the physical medium, and its location recorded for later use. The storage device often keeps a list, or directory, of these locations. When a future request is made for a particular item, the request includes only the location (for example, path and file names) of the data. The storage device can then use this information to locate the data on the physical medium, and retrieve it. When new information is written into a location-addressed device, it is simply stored in some available free space, without regard to its content. In contrast, when information is stored into a CAS system, the system will record a content address, which is an identifier uniquely and permanently linked to the information content itself. A request to retrieve information from a CAS system must provide the content identifier, from which the system can determine the physical location of the data and retrieve it. Because the identifiers are based on content, any change to a data element will necessarily change its content address. |
̸µ½ÄÚÈÝѰַ£¬ÓбØÒªÁ˽âһϵľÍÊDZ¾µØÑ°Ö·£¬»òÕß½ÐÎïÀíѰַ¡£¶ÔÓÚÎïÀíѰַϵͳ£¬ÆäËùÓÐÊý¾Ý´æ´¢ÔÚÎïÀíý½éµÄ¿ÉÓÿռ䣬ÓëÆäÄÚÈÝÎ޹أ¬ÏµÍ³¼Ç¼ÆäÎïÀíµØÖ·£¨physical
location£©¹©ËæºóʹÓã¬ÕâЩÎïÀíµØÖ·Í¨³£Í¨¹ýʹÓÃÒ»¸öÁбí»òÕßĿ¼À´Î¬»¤£¬µ±ÔÙ´ÎÇëÇóÌØ¶¨Êý¾Ýʱ£¬ÐèҪʹÓÃÆäÎïÀíµØÖ·£¬Èç·¾¶ºÍÎļþÃû¡£
¶ø¶ÔÓÚÒ»¸öÄÚÈÝѰַϵͳ£¬ÏµÍ³¼Ç¼µÄÊÇÒ»¸öÄÚÈݵØÖ·£¨content-address£©£¬¸ÃÄÚÈݵØÖ·ÊǶÔÓ¦Êý¾ÝµÄÒ»¸öΨһÇҳ־õÄʶ±ð·û£¬ËüÊÇͨ¹ý¼ÓÃܹþÏ£Ëã·¨£¨È磬SHA-1»òMD5£©¼ÆËã³öÀ´µÄÒ»´®Öµ£¬µ±ÎÒÃÇÐèÒªÊý¾Ýʱ£¬Ìṩ¸ÃÄÚÈݵØÖ·£¬ÏµÍ³¼´¿Éͨ¹ý¸ÃµØÖ·»ñÈ¡Êý¾ÝµÄÎïÀíµØÖ·£¬·µ»ØÊý¾Ý£»Í¬Ê±£¬¶ÔÓÚÊý¾ÝµÄÈκαä¸ü¶¼½«µ¼ÖÂÄÚÈݵØÖ··¢Éú±ä»¯¡£
GitÖÐËùÓеÄÕâЩÄÚÈݵØÖ·¶¼´æ´¢ÔÚ¸ùĿ¼ÏµÄ.git/objects/Îļþ¼ÐÏ£¬ËûÃǰ´ÕÕÊ÷Ðνṹ·ÖÀà´æ·Å£¬Ã¿¸öÄÚÈݵØÖ·µÄǰÁ½Î»×÷Ϊ֦¸É·Ö±ð½¨Á¢×ÓĿ¼£¬¸ÃĿ¼Ï´æÔÚËùÓÐͬÀàÐÍ(¿ªÍ·Ïàͬ)µÄÄÚÈݵØÖ·¡£
Git¶ÔÏó
ÏÂÃæÐèÒª½éÉÜGit´æ´¢Ïà¹ØµÄ¼¸¸ö¶ÔÏó¸ÅÄÌá½»¶ÔÏó£¬tree¶ÔÏó£¬blob¶ÔÏó¡£
GIT CAT-FILE
GitÌṩcat-fileÖ¸ÁîÖ§³Ö½«Ð£ÑéºÍ½âÃÜ¿ª£¬ÈçÏÂУÑéºÍÊÇ¡±hello¡±¾¹ýSHA-1Ëã·¨¼ÓÃܺóµÃµ½µÄ£¬»¹Ôºó£º

Ìá½»¶ÔÏó
ÈçÏ£¬ÎÒÃdzõʼ»¯Ò»¸ö±¾µØ²Ö¿â£¬²¢½øÈëGit´æ´¢Ä¿Â¼.git/objects£¬ÕâÀï³ýÁËĬÈÏ´´½¨µÄpackºÍinfo×ÓĿ¼£¬²¢Ã»ÓÐÈκδ洢Îļþ»òĿ¼£¬ÒòΪµ±Ç°²Ö¿âÊǿյģº

ÎÒÃÇÔÚ²Ö¿âÄÚн¨Ò»¸öÎļþ£¬²¢ÔÚÎļþÖÐÊäÈ롱hello¡±ÄÚÈÝ£º

ÎÒÃÇ¿´µ½´Ë´ÎÌá½»µÄcommitIdÊÇdebaa7e47534af51ef3c10117200e65dd4c658ef£¬ÎÒÃǸù¾ÝУÑéºÍµÄǰÁ½Î»£¬¼´deÔÚ.git/objects/ÏÂѰÕÒdeĿ¼£¬½øÈë¸ÃĿ¼£º

¸ÃÖµ¾ÍÊÇ֮ǰµÄÌá½»commitIdÖµ£¬¸ÃÖµÒ²ÊÇ´Ë´ÎÌá½»¶ÔÏóµÄУÑéºÍ£¬½âÃÜÈçÏ£º

ÔÚÉÏͼÖУ¬ÎÒÃDz¢Ã»ÓÐʹÓÃÍêÕûµÄУÑéºÍ£¬ÒòΪGitʹÓÃSHA-1Ëã·¨¼ÆËãУÑéºÍ£¬Ç°Ãæ8λ×Ö·ûÍêÈ«ÖØµþµÄÇé¿ö¼¸ºõ²»´æÔÚ£¬¶øÇҶԱȺó·¢ÏÖ½âÃܺóµÄÄÚÈݺÍ֮ǰ²é¿´µÄÌá½»ÀúÊ·ÄÚÈÝÎǺϣ¬ÎÒÃÇÔٴαä¸üÄÚÈÝ£¬ÐÂÔö¼¸¸öÎļþ£º

Ôٴθù¾ÝÐÂÌá½»µÄcommitId686b5e1cbfa83ed0244558d006ee01543fde83f3£¬½âÃÜ£º

ºÍ³õʼÌá½»¶ÔÏóÏà±È¶àÁËÒ»ÐÐparent debaa7e47534af51ef3c10117200e65dd4c658ef,¸ÃÐжÔÓ¦´æ´¢µÄУÑéºÍ´ú±íµÄÊÇ´Ë´ÎÌá½»µÄ¸¸Ìá½»¶ÔÏ󣬴˴¦¼´Ö®Ç°µÄ³õʼÌá½»¶ÔÏóУÑéºÍ¡£
ͨ³£Ìá½»¶ÔÏó°üÀ¨Èý²¿·ÖÄÚÈÝ£º
Ìá½»ÐÅÏ¢£º°üÀ¨Ìá½»ÕßÐÕÃû/ÓÊÏäºÍÌá½»±¸×¢µÈÏà¹ØÐÅÏ¢£»
tree¶ÔÏóµÄУÑéºÍ£º¹ØÓÚtree¶ÔÏóÔÚÏÂÒ»½ÚÏêϸ½éÉÜ£»
¸¸Ìá½»¶ÔÏóµÄУÑéºÍ£¨¿ÉÄÜ´æÔÚ¶à¸ö¡£Èç·ÖÖ§·¢ÉúºÏ²¢Ê±£¬Ìá½»µÄ¸¸Ìá½»¿ÉÄÜÓжà¸ö£©
TREE¶ÔÏó
½âÃÜÉÏÀýÖеÄtree¶ÔÏóУÑéºÍ£º

ÎÒÃÇ·¢ÏÖ´Ëtree¶ÔÏó°üº¬ÈýÐУ¬Ç°Á½ÐÐÊÇÁ½¸öblobУÑéºÍ£¬Ö¸Ïòµ¥¸öÎļþ£¬µÚÈýÐеÄУÑéºÍÊǶÔÓ¦Ò»¸ötree¶ÔÏó£¬Ö¸ÏòÒ»¸öspaĿ¼¡£
»¹ÔµÚÒ»ÐеÄblob¶ÔÏó£º

¿ÉÒÔ·¢ÏÖblobУÑéºÍ¾Í´ú±íÁ˸ÃÎļþµÄÄÚÈÝ£»ÔÙ¿´¶þ¼¶tree¶ÔÏóУÑéºÍ½âÃܺó£º

ºÍÒ»¼¶tree¶ÔÏóÀàËÆ£¬Æä°üº¬ÁËÒ»¸öblobУÑéºÍ£¬Ö¸ÏòspaĿ¼ÏµÄtest.js£¬µ±È»Õâ¸öУÑéºÍ´ú±íµÄ¾ÍÊÇtest.jsÎļþµÄÄÚÈÝ£º

ÏÖÔÚ£¬ÎÒÃÇÖªµÀÒ»¸ötree¶ÔÏó¿ÉÒÔ°üº¬£º
Èô¸Étree¶ÔÏóУÑéºÍ: Ö¸Ïòµ±Ç°Ä¿Â¼µÄÒ»¸ö×ÓĿ¼£»
Èô¸ÉblobУÑéºÍ£ºÖ¸ÏòÒ»¸öÎļþ
×¢£ºÕâÀïµÄblob˵Ã÷GitÊÇͨ¹ý´´½¨Blob¶ÔÏ󣨶þ½øÖÆ·½Ê½£©´æ´¢Êý¾Ý¡£
BLOB¶ÔÏó
BLOB (binary large object)£¬¶þ½øÖÆ´ó¶ÔÏó£¬ÊÇÒ»¸ö¿ÉÒÔ´æ´¢¶þ½øÖÆÎļþµÄÈÝÆ÷£¬GitÖÐËùÓÐÊý¾Ý¶¼ÊÇͨ¹ý¸Ã·½Ê½´æ´¢¡£ |