Äú¿ÉÒÔ¾èÖú£¬Ö§³ÖÎÒÃǵĹ«ÒæÊÂÒµ¡£

1Ôª 10Ôª 50Ôª





ÈÏÖ¤Â룺  ÑéÖ¤Âë,¿´²»Çå³þ?Çëµã»÷Ë¢ÐÂÑéÖ¤Âë ±ØÌî



  ÇóÖª ÎÄÕ ÎÄ¿â Lib ÊÓÆµ iPerson ¿Î³Ì ÈÏÖ¤ ×Éѯ ¹¤¾ß ½²×ù Modeler   Code  
»áÔ±   
 
   
 
 
     
   
 ¶©ÔÄ
  ¾èÖú
ʹÓÃgit΢ÃüÁîÉîÈëÀí½âgit¹¤×÷»úÖÆ
 
×÷Õß kangearµÄ²©¿Í£¬»ðÁú¹ûÈí¼þ    ·¢²¼ÓÚ 2014-07-16
  2625  次浏览      27
 

Ê×ÏÈ£¬ÕâÆª²»ÊÇÕæÕýÒâÒåÉϵķ­Ò룬ËùÒÔ´ó¼ÒÔÚ¿´µÄʱºò²»ÒªÕÒ¶ÔÓ¦µÄÓ¢ÎÄÎÄÕ¶ÔÓ¦×Å¿´¡£ÕâÆªÎÄÕÂÖ®ËùÒÔ¹éÀàΪ·­Ò룬ÊÇÒòΪ×ʼÓÐһƪӢÎÄÎÄÕÂÈÃÎÒ¶ÔgitÄÚ²¿»úÖÆÓÐÁËÇå³þµÄÈÏʶ£¬Ëü¿ÉÒÔ˵ÊÇÎÒgitµÄÆôÃÉÀÏʦ°É¡£È»ºóºÜ¾Ã¹ýÈ¥ºó£¬×Ô¼ºÒ²ÓÐÁ˺ܶàµÄgitÏîĿʵ¼ù£¬¾õµÃÓбØÒª´Ó×Ô¼ºµÄÀí½â½Ç¶È£¨Î¢ÃüÁîºÍ³£ÓÃÃüÁî¶ÔÓ¦·ÖÎö£©À´ÕûÀíÏÂ×Ô¼ºµÄÀí½â£¬ÓÚÊÇÓÐÁËÕâÆª²©ÎÄ¡£

gitÊÇÒ»ÖÖ¹ÜÀíÊý¾ÝµÄ¹¤¾ß£¬Ò»ÖÖÖ§³Ö¿ìËÙË÷Òý²éÕÒÊý¾Ý²¢¹ÜÀíÊý¾Ý±ä»¯µÄ¹¤¾ß¡£ËüΪÊý¾ÝÌí¼ÓÒ»¸öÍ··âװΪ¶ÔÏó¿é(±¾ÎijÆÎªgit¶ÔÏó)È»ºó±£´æÎªÎļþ£¬²¢¸ù¾ÝÊý¾ÝÉú³ÉÒ»¸öSHAÖµ,È»ºóÒÔ¸ÃÖµ×÷ΪÎļþÃû³ÆµÄÒÀ¾Ý£¬SHAÖµµÄǰ2λÊÇÎļþµÄĿ¼Ãû×Ö£¬ºóÃæµÄֵΪÎļþÃû£¬ÕâÑù¾ÍÄܺÜÈÝÒ׸ù¾ÝSHA²éÕÒµ½Êý¾Ý¡£Í¬Ê±ÓÉÓÚSHAµÄΨһÐÔ£¬Ò»µ©ÎļþÄÚÈݸı䣬Æä¶ÔÓ¦µÄSHA¾Í»á±ä»¯£¬Òò¶øºÜÊʺÏÎļþ±ä»¯¹ÜÀí¡£git×ܹ²ÓÐËÄÀà¶ÔÏó£º

blob¶ÔÏó£º

¸Ã¶ÔÏóÊÇÕæÕýµÄÊý¾Ý¶ÔÏó£¬ËüµÄÄÚÈÝÊǸ÷ÖÖÎļþµÄÊý¾ÝÄÚÈÝ£¬±ÈÈçgitÏîÄ¿ÀïµÄÎļþÊý¾Ý¡£ÐèҪעÒâµÄÊÇblob¶ÔÏóÖ»ÊDZ£´æÊý¾Ý£¬²¢²»±£´æÊý¾ÝµÄ¶îÍâÐÅÏ¢£¬±ÈÈçÎļþÃû£¬Îļþ´óС¡£

tree¶ÔÏó£º

¸Ã¶ÔÏóÊÇÒ»ÖÖ¹ÜÀí¶ÔÏó£¬ËüÊÇÓÃÀ´¹ÜÀí¶ÔÏóµÄ¶ÔÏ󣬯äÄÚÈÝÖ¸³öÁ˸Ãtree°üº¬ÄÄЩ×Ó¶ÔÏó£¬tree¿ÉÒԵݹéµÄ£¬Ò²¾Í˵tree¿ÉÒÔ°üº¬ÆäËûµÄtree¡£Tree¶ÔÏó¾ÍÏñlinuxÎļþϵͳÀïµÄĿ¼һÑù£¬Ä¿Â¼±¾ÉíÊÇÒ»ÖÖÎļþ£¬Ö»²»¹ýĿ¼ÎļþµÄÄÚÈÝÊÇĿ¼ÏµÄÎļþÐÅÏ¢,Ŀ¼Ï»¹ÓÐ×ÓĿ¼¡£

commit¶ÔÏó£º

commit¶ÔÏóÊÇÕæÕýÖ±½Ó³ÊÏÖ¸øgitʹÓÃÕߵģ¬Ëü¾ÍÊÇÎÒÃǾ­³£Ëµµ½µÄgitÏîÄ¿ÀúÊ·¼Ç¼£¬ÎÒÃǾ­³£ÓõÄgit show xxx,git log xxx,git check xxxµÈÃüÁîºóÃæ½ÓµÄÊý×Ö¾ÍÊÇcommit¶ÔÏóµÄÃû×Ö£¬Ò²¾ÍÊÇcommit¶ÔÏó¶ÔÓ¦µÄSHAÖµ¡£commit¶ÔÏó±ØÐëÓÐÒ»¸ötree¶ÔÏó£¬Ëü±¾Éí²¢²»ºÍÊý¾ÝÓÐÖ±½ÓÁªÏµ£¬git¹¤¾ßͨ¹ýËüµÄtree¶ÔÏóÕÒµ½¸Ãcommit¶ÔÓ¦µÄÊý¾Ý£¬Í¬Ê±ºÍtree¶ÔÏóÒ»Ñù£¬Ëü¿ÉÒÔÓÐ×Ô¼ºµÄ¸¸Ç×commit£¬ÕâÑù¾ÍÐγÉÁËgitÀúÊ·µ¥ÏòÁ´±í¡£

tag ¶ÔÏó£º

tag¶ÔÏóÆäʵ¾ÍÊÇÉÏÃæÈýÖÖ¶ÔÏóµÄÒ»ÖÖ±ðÃû±í´ï·½Ê½¡£´ÓÉÏÃæµÄÃèÊöÎÒÃÇ¿ÉÖª£¬git¶ÔÏóµÄÃû×ÖÊÇSHAÖµ£¬¾ÍÊÇÒ»¶ÑûÓйæÂɵij¤´®µÄ×Ö·û£¬Óû§×ÔÈ»²»ÈÝÒ×¼ÇÒ²¼Ç²»×¡¡£Òò´ËgitÌá³öÁËtag¶ÔÏóÕâÑùÒ»ÖÖ¶ÔÏó£¬ËüÔÊÐíÓû§ÒÔËûÃÇÈÝÒ×ʶ±ðµÄÃû×ÖÀ´±êʾÉÏÃæµÄÈÎÒ»¶ÔÏó¡£

ÓÐÁËÕâЩ»ù±¾¸ÅÄÎÒÃÇͨ¹ýʹÓÃgit ΢ÃüÁîÀ´ÏêϸµÄÈÏʶÏÂÕâЩ¶ÔÏóµÄÐÎʽ£¬Éú³É¼°Ê¹Óá£git΢ÃüÁîÊÇÏà¶Ô

ÎÒÃÇÆ½Ê±ÓõÄgit commit, git adddµÈÃüÁî¶øÑԵģ¬Î¢ÃüÁî×öµÄÊÂÇéÉÙ£¬¿ÉÒÔºÜÇåÎú¿´µ½Ã¿Ò»¸ö²½Öè¡£

´´½¨ÐµÄgitÏîÄ¿

ÎÒÃÇÖ´ÐÐgit initºó£¬ÏµÍ³»á×Ô¶¯°ïÎÒÃÇ´´½¨Ò»¸öÒþ²ØÄ¿Â¼.git£¬¾ßÌåÄÚÈÝÈçÏ£º

itleaks@Itleaks:/tmp/test$ git init .
Initialized empty Git repository in /tmp/test/.git/
itleaks@Itleaks:/tmp/test$ tree . -al
.
©¸©¤©¤ .git
©À©¤©¤ branches
©À©¤©¤ config
©À©¤©¤ description
©À©¤©¤ HEAD
©À©¤©¤ hooks
©¦ ©À©¤©¤ applypatch-msg.sample
©¦ ©À©¤©¤ commit-msg.sample
©¦ ©À©¤©¤ post-update.sample
©¦ ©À©¤©¤ pre-applypatch.sample
©¦ ©À©¤©¤ pre-commit.sample
©¦ ©À©¤©¤ prepare-commit-msg.sample
©¦ ©À©¤©¤ pre-push.sample
©¦ ©À©¤©¤ pre-rebase.sample
©¦ ©¸©¤©¤ update.sample
©À©¤©¤ info
©¦ ©¸©¤©¤ exclude
©À©¤©¤ objects
©¦ ©À©¤©¤ info
©¦ ©¸©¤©¤ pack
©¸©¤©¤ refs
©À©¤©¤ heads
©¸©¤©¤ tags

ÉÏÃæµÄ.git/objectsÊÇ×îÖØÒªµÄĿ¼£¬Ëü¾ÍÊÇÓÃÀ´±£´æÉÏÃæÌáµ½µÄËÄÖÖ¶ÔÏóÎļþµÄĿ¼¡£

Éú³ÉBlob¶ÔÏó

gitÉú³Éblob¶ÔÏóÊÇʹÓÃgithash-objectÀ´Éú³É£¬¾ßÌå²Ù×÷ÈçÏ£º

itleaks@Itleaks:/tmp/test$ echo "itleaks test">test.txt
itleaks@Itleaks:/tmp/test$ git hash-object -w test.txt
be976caf33466b3a9fbc04260139a992e5664b9c
itleaks@Itleaks:/tmp/test$ tree . -al
.
©À©¤©¤ .git
©¦ ©À©¤©¤ branches
©¦ ©À©¤©¤ config
©¦ ©À©¤©¤ description
©¦ ©À©¤©¤ HEAD
©¦ ©À©¤©¤ hooks
©¦ ©¦ ©À©¤©¤ applypatch-msg.sample
©¦ ©¦ ©À©¤©¤ commit-msg.sample
©¦ ©¦ ©À©¤©¤ post-update.sample
©¦ ©¦ ©À©¤©¤ pre-applypatch.sample
©¦ ©¦ ©À©¤©¤ pre-commit.sample
©¦ ©¦ ©À©¤©¤ prepare-commit-msg.sample
©¦ ©¦ ©À©¤©¤ pre-push.sample
©¦ ©¦ ©À©¤©¤ pre-rebase.sample
©¦ ©¦ ©¸©¤©¤ update.sample
©¦ ©À©¤©¤ info
©¦ ©¦ ©¸©¤©¤ exclude
©¦ ©À©¤©¤ objects
©¦ ©¦ ©À©¤©¤ be
©¦ ©¦ ©¦ ©¸©¤©¤ 976caf33466b3a9fbc04260139a992e5664b9c
©¦ ©¦ ©À©¤©¤ info
©¦ ©¦ ©¸©¤©¤ pack
©¦ ©¸©¤©¤ refs
©¦ ©À©¤©¤ heads
©¦ ©¸©¤©¤ tags
©¸©¤©¤ test.txt
itleaks@Itleaks:/tmp/test$ find .git/objects/ -type f
.git/objects/be/976caf33466b3a9fbc04260139a992e5664b9c

´ÓÉÏÃæ¿ÉÒÔ¿´³ö£¬µ±ÎÒÃÇʹÓÃhash-object¨CwÉú³ÉÒ»¸ö¶ÔÏóºó,git»áÔÚ.git/objectsÏÂÉúÒ»¸öÎļþbe/ 976caf33466b3a9fbc04260139a992e5664b9c,Õâ¸ö¾ÍÊÇSHAÖµ¡£ÓÐÁËÕâ¸ö¶ÔÏóµÄSHAÖµºó£¬ÎÒÃÇ¿ÉÒÔͨ¹ýgitcat-fileÃüÁîÀ´²é¿´¸Ã¶ÔÏóµÄԭʼÊý¾Ý¡£

//²é¿´¶ÔÏóÀàÐÍ
itleaks@Itleaks:/tmp/test$ git cat-file -t be976caf33466b3a9fbc04260139a992e5664b9c
blob
//²é¿´¶ÔÏóÄÚÈÝ
itleaks@Itleaks:/tmp/test$ git cat-file -p be976caf33466b3a9fbc04260139a992e5664b9c
itleaks test

´Ëʱ¶ÔÓ¦µÄÊý¾Ý¶ÔÏóͼÈçÏ£º

µ½ÕâÀÄã¿ÉÄÜ»áÎÊ£¬test.txtÕâ¸öÃû×ÖµÄÐÅÏ¢±£´æÔÚÄÄÄØ£¿ÆäÊµÇ°ÃæÒѾ­Ìáµ½ÁË£¬blob¶ÔÏóÖ»´æÊý¾Ý(ÉÏÃæµÄ×Ö·û´®¡± itleaks test¡±)£¬²¢²»±£´æÆäËû¶îÍâÐÅÏ¢¡£ÄÇÕâ¸öÃû×Öʲôʱºò±£´æµÄÄØ£¿±£´æÕ¦ÄÄÀïÄØ£¿Õâ¸ö¾ÍÊÇÓÉÏÂÃæÒªÌáµ½µÄtree ¶ÔÏóÀ´Î¬»¤µÄ¡£

Éú³ÉTree¶ÔÏó

ÉÏÃæµÄ²Ù×÷¹ýºó£¬ÏµÍ³ÒѾ­´æÔÚÒ»¸öblob¶ÔÏóÁË¡£ÎÒÃÇ¿ÉÒÔ½«¸Ã¶ÔÏóÌí¼Óµ½Ò»¸ötree¶ÔÏóÀï,ÔÚÌí¼Óµ½tree¶ÔÏóǰ£¬±ØÐ뽫¸Ãblob¶ÔÏó·â×°³ÉÒ»¸ötree ¶ÔÏóµÄitemÊý¾Ý¿é, ²¢½«¸ÃitemÊý¾Ý¿éдµ½cacheÀï¡£itemÊý¾Ý¿éµÄ¸ñʽÊÇblob¶ÔÏóSHAÖµ+Êý¾ÝÎļþÃû×Ö(test.txt)+Îļþģʽ(100644)¡£ÕâÒ»¸ö¹ý³ÌÓÉgit update-indexÍê³É

itleaks@Itleaks:/tmp/test$ git update-index --add --cacheinfo 100644 \
> be976caf33466b3a9fbc04260139a992e5664b9c test.txt
//µ½´Ë£¬ÖÕÓÚ³öÏÖÁËÇ°ÃæÌáµ½µÄtest.txt£¬ÕâÀï²ÅÊÇÎÒÃÇÔÚgitÀï¿´µ½µÄÎļþÃû
//ÆäʵÕâÀïµÄÎļþÃûÒ²¿ÉÒÔÌîÆäËûÃû×Ö£¬gitϵͳ²¢²»ÈÏʶ²Ù×÷ϵͳÖеÄÎļþÃû£¬Ö»
//ÖªµÀÕâÀïµÄÎļþÃû£¬È»ºóÆäËûÓû§Í¨¹ýgit clone ¸ÃgitÏîĿʱ£¬¸Ãblob¶ÔÏó¶ÔÓ¦µÄÊý¾Ý
//Îļþ»áÃüÃûΪÕâÀïÖ¸¶¨µÄÃû³Æ
itleaks@Itleaks:/tmp/test$ git ls-files
test.txt
//ls-files¿ÉÒԲ鿴cacheÀïµÄËùÓÐblob¶ÔÏóÃèÊö
itleaks@Itleaks:/tmp/test$ find .git/objects/ -type f
.git/objects/be/976caf33466b3a9fbc04260139a992e5664b9c
//update-indexÖ´Ðк󣬲¢²»»áÔö¼Óobject

Èç¹ûÓжà¸öÊý¾Ý£¬¿ÉÒÔÖØ¸´Ö´ÐÐÉÏÃæµÄÃüÁ½«¶à¸öblob¶ÔÏóÌí¼Óµ½cacheÖС£È»ºóµ±Óû§Ö´ÐÐgit write-treeµÄʱºò£¬¾Í»áÉú³ÉÒ»¸ötree¶ÔÏ󣬲¢½«cacheÀïµÄËùÓÐblob¶ÔÏóµÄÃèÊöÊý¾ÝÌí¼Óµ½tree¶ÔÏóµÄÎļþÀ¾ßÌåÃüÁîÈçÏ£º

itleaks@Itleaks:/tmp/test$ git write-tree
941220dc97574b7dba7b22fdb21333c7227c9603
itleaks@Itleaks:/tmp/test$ find .git/objects/ -type f
.git/objects/be/976caf33466b3a9fbc04260139a992e5664b9c
.git/objects/94/1220dc97574b7dba7b22fdb21333c7227c9603
//ÐÂÔöÁËÒ»¸öobjectÎļþ
itleaks@Itleaks:/tmp/test$ git cat-file -t 941220dc97574b7dba7b22fdb21333c7227c9603
tree
itleaks@Itleaks:/tmp/test$ git cat-file -p 941220dc97574b7dba7b22fdb21333c7227c9603
100644 blob be976caf33466b3a9fbc04260139a992e5664b9c test.txt
//tree¶ÔÏóµÄÄÚÈÝÊÇÃèÊöÆä¹ÜÀíµÄblob¶ÔÏóµÄÖ¸ÏòÐÅÏ¢

´Ëʱ¶ÔÓ¦µÄÊý¾Ý¶ÔÏóͼÈçÏ£º

µ½´ËΪֹ£¬ËùÓеĶÔÏó¶¼ÊÇÏà¶Ôµ×²ãµÄÊý¾Ý¶ÔÏó£¬gitÓû§Ò»°ãÊDz»»áÖ±½ÓʹÓõġ£È»ºó¾Í¸Ãcommit¶ÔÏóÂ¶ÃæÁË¡£

Éú³Écommit¶ÔÏó

Æäʵcommit¶ÔÏó£¬Äã¿ÉÒÔÀí½â³Étree¶ÔÏóµÄÀ©Õ¹£¬ËüÊÇÓÃÀ´ÃèÊöÒ»¸ötree¶ÔÏóµÄ¶îÍâÐÅÏ¢µÄ¡£ËüÏ൱ÓÚÊÇtree¶ÔÏóΪÓû§Ô¤Áô³öÀ´µÄ½Ó¿Ú£¬Óû§Í¨¹ýÉú³ÉÒ»¸öcommit¶ÔÏ󣬾ͿÉÒÔ¸øÒ»¸ötree¶ÔÏó´ò±êÇ©£¬±ÈÈçÓû§ÐÕÃû£¬ÃèÊö£¬Ê±¼ä¡£¾ßÌåÉú³É¹ý³ÌÈçÏ£º

itleaks@Itleaks:/tmp/test$ echo 'initial version' | git commit-tree 941220dc97574b7dba
f7bde89df6b5d8ea3fa3ccae0e3d53e8a5aa25d2
//ÉÏÃæµÄ941220dc97574b7dba¾ÍÊÇtree¶ÔÏóµÄSHAÖµ
itleaks@Itleaks:/tmp/test$ find .git/objects/ -type f
.git/objects/f7/bde89df6b5d8ea3fa3ccae0e3d53e8a5aa25d2
.git/objects/be/976caf33466b3a9fbc04260139a992e5664b9c
.git/objects/94/1220dc97574b7dba7b22fdb21333c7227c9603
//commitÒ²ÊÇÒ»¸ö¶ÔÏó
itleaks@Itleaks:/tmp/test$ git cat-file -t f7bde89df6b5d8ea3fa3ccae0e3d53e8a5aa25d2
commit
itleaks@Itleaks:/tmp/test$ git cat-file -p f7bde89df6b5d8ea3fa3ccae0e3d53e8a5aa25d2
tree 941220dc97574b7dba7b22fdb21333c7227c9603
author itleaks <itleaks@126.com> 1403052327 +0800
committer itleaks <itleaks@126.com> 1403052327 +0800
initial version
//commit¶ÔÏóµÄÄÚÈÝÖ¸³öÁËËüÃèÊöµÄÊÇÄĸötree

´Ëʱ¶ÔÓ¦µÄÊý¾Ý¶ÔÏóͼÈçÏ£º

CommitÉú³Éºó£¬Óû§¾ÍÊìϤÁË£¬Óû§Í¨¹ý³£ÓõÄgit showÃüÁî¾Í¿ÉÒÔºÜÖ±½ÓµÄ²é¿´Õâ¸öcommit

itleaks@Itleaks:/tmp/test$ git show f7bde89df6b5d8ea3fa3ccae0e3d53e8a5aa25d2
commit f7bde89df6b5d8ea3fa3ccae0e3d53e8a5aa25d2
Author: itleaks <itleaks@126.com>
Date: Wed Jun 18 08:45:27 2014 +0800
initial version
diff --git a/test.txt b/test.txt
new file mode 100644
index 0000000..be976ca
--- /dev/null
+++ b/test.txt
@@ -0,0 +1 @@
+itleaks test

ÄÇÖ´ÐÐgit logÄØ£¿

itleaks@Itleaks:/tmp/test$ git log
fatal: bad default revision 'HEAD'
itleaks@Itleaks:/tmp/test$ cat .git/HEAD
ref: refs/heads/master
itleaks@Itleaks:/tmp/test $ tree .git/refs/heads/
.git/refs/heads/
0 directories, 0 files

ϵͳ»áÌáʾbad HEAD,ÕâÊÇÒòΪrefs/heads/masteÎļþ²»´æÔÚ¡£Õâ¸ö¾ÍÊÇÏÂÃæÎÒÒª½²µÄgit referrence¶ÔÏó¡£

Ref¶ÔÏó

´ÓÃû×Ö¿ÉÒÔ¿´³öÀ´£¬Ëü¾ÍÊÇÒ»¸öÒýÓã¬Ëü¾ÍÊÇcommit¶ÔÏóµÄ±ðÃû£¬ËüÖ±½ÓÒÔ×Ö·û´®µÄÐÎʽ±£´æÒ»¸öcommit¶ÔÏóµÄÃû×Ö£¬ÕâÑùÓû§Ö±½Ó¸ù¾Ýref¶ÔÏóµÄÃû×־ͿÉÒÔÖ±½ÓÕÒµ½¶ÔÓ¦µÄcommit¶ÔÏ󣬶ø²»ÓüÇסһ³¤´®SHA×Ö·û´®¡£ÁíÍ⣬ÕâÀïµÄref¶ÔÏó¾ÍÊÇÎÒÃdz£ËµËµµ½git branch£¬Ò»¸öbranch¶ÔÓ¦Ò»¸örefs/heads/xxÎļþ¡£

itleaks@Itleaks:/tmp/test$ echo "f7bde89df6b5d8ea3fa3ccae0e3d53e8a5aa25d2" 
> .git/refs/heads/master
itleaks@Itleaks:/tmp/test$ find .git/objects/ -type f
.git/objects/f7/bde89df6b5d8ea3fa3ccae0e3d53e8a5aa25d2
.git/objects/be/976caf33466b3a9fbc04260139a992e5664b9c
.git/objects/94/1220dc97574b7dba7b22fdb21333c7227c9603
//Éú³Éref²¢Ã»ÓÐÐÂÔöobject
itleaks@Itleaks:/tmp/test$ find .git/refs/ -type f
.git/refs/heads/master
//Ö´ÐÐÉÏÃæµÄÃüÁîÉú³ÉÒ»¸ömaster ref¶ÔÏóºó£¬Óû§²»ÔÙÐèҪʹÓÃgit show SHAÖµ£¬¶øÊÇ
//Ö±½ÓʹÓÃgit show name¾Í¿ÉÒԲ鿴commit¶ÔÏóµÄÏêϸÐÅÏ¢
itleaks@Itleaks:/tmp/test$ git show master
commit f7bde89df6b5d8ea3fa3ccae0e3d53e8a5aa25d2
Author: itleaks <itleaks@126.com>
Date: Wed Jun 18 08:45:27 2014 +0800
initial version
diff --git a/test.txt b/test.txt
new file mode 100644
index 0000000..be976ca
--- /dev/null
+++ b/test.txt
@@ -0,0 +1 @@
+itleaks test

refs/heads/masterÉú³Éºó£¬Óû§ÖÕÓÚ¿ÉÒÔʹÓÃgitlog²é¿´ÁË

itleaks@Itleaks:/tmp/test$ git log
commit f7bde89df6b5d8ea3fa3ccae0e3d53e8a5aa25d2
Author: itleaks <itleaks@126.com>
Date: Wed Jun 18 08:45:27 2014 +0800
initial version

´Ëʱ¶ÔÓ¦µÄÊý¾Ý¶ÔÏóͼÈçÏ£º

΢git²Ù×÷¶ÔÓ¦µÄgit³£ÓÃÃüÁî

µ½´Ë£¬´ó¼Ò¹À¼ÆÒ²¿´ÀÛÁ˰ɣ¬µ«ÊÇÈç¹ûÎÒ¸æËßÄãÉÏÃæÕâô³¤µÄ²Ù×÷£¬Óû§Æäʵͨ¹ýÈçÏÂÁ½ÌõÃüÁî¿ÉÒÔʵÏÖÒ»ÑùµÄЧ¹û£¬Äã»á²»»á¾ªÑȰ¡!

git add test.txt
git commit -sm ¡°initial version¡±

ÎÒÃÇÒ²À´¿´ÏÂÕâÁ½Ìõ²Ù×÷¶ÔÓ¦µÄ.gitÄÚÈݱ仯¹ý³Ì

itleaks@Itleaks:/tmp/test$ echo "itleaks test">test.txt
itleaks@Itleaks :/tmp/test$ git add test.txt
itleaks@Itleaks:/tmp/test$ find .git/objects/ -type f
.git/objects/be/976caf33466b3a9fbc04260139a992e5664b9c
itleaks@Itleaks:/tmp/test$ git cat-file -t be976caf33466b3a9fbc04260139a992e5664b9c
blob
itleaks@Itleaks:/tmp/test$ git ls-files
test.txt

´ÓÉÏÃæ¿ÉÒÔ¿´³ö£¬git addÃüÁî»áΪÎÒÃÇ´´½¨blob¶ÔÏ󣬲¢ÇÒ×Ô¶¯½«¸Ãblob¶ÔÏóÌí¼Óµ½cacheÖС£¸ü²»¿É˼ÒéµÄÊÇ£¬Éú³ÉµÄ¶ÔÏóÃû×Öbe976caf33466b3a9fbc04260139a992e5664b9cºÍÉÏÃæµÄһģһÑù£¬ÎªÉ¶£¬ÕâÊÇÓÉSHAÇ©ÃûÉú³É»úÖÆÏà¹Ø---Ö»ÒªÊý¾ÝÒ»Ö£¬Æä²úÉúµÄSHAÒ»¶¨Ò»Ñù¡£

itleaks@Itleaks:/tmp/test$ git commit -sm "initial version"
[master (root-commit) 12ca076] initial version
1 file changed, 1 insertion(+)
create mode 100644 test.txt
itleaks@Itleaks:/tmp/test$ find .git/objects/ -type f
.git/objects/12/ca0768b1a7c1f5f8547617af78e13d7263aaba
.git/objects/be/976caf33466b3a9fbc04260139a992e5664b9c
.git/objects/94/1220dc97574b7dba7b22fdb21333c7227c9603
itleaks@Itleaks:/tmp/test$ git cat-file -p 12ca0768b1a7c1f5f8547617af78e13d7263aaba
tree 941220dc97574b7dba7b22fdb21333c7227c9603
author itleaks <itleaks@126.com> 1403098727 +0800
committer itleaks <itleaks@126.com> 1403098727 +0800
initial version
Signed-off-by: itleaks <itleaks@126.com>
itleaks@Itleaks:/tmp/test$ git cat-file -p 941220dc97574b7dba7b22fdb21333c7227c9603
100644 blob be976caf33466b3a9fbc04260139a992e5664b9c test.txt

´ÓÉÏÃæ¿ÉÒÔ¿´³öcommitÕâÌõÃüÁîÉú³ÉÁËÁ½¸ö¶ÔÏó£ºtree¶ÔÏóºÍcommit¶ÔÏó.´ó¼Ò×¢Òâû£¬Ö»ÓÐcommit¶ÔÏóµÄSHAÖµºÍÎÒÃÇÉÏÃæ²»Ò»Ñù£¬ÁíÍâÁ½¸ö¶ÔÏóÊÇÒ»ÑùµÄ£¬ÎªÊ²Ã´£¿ÄÇÊÇÒòΪcommit¶ÔÏóµÄÄÚÈÝÖаüº¬Ê±¼ä£¬Á½´Îcommit¶ÔÏóÉú³ÉµÄʱ¼ä²»Ò»ÑùÒâζ×ÅÆäÄÚÈݾͲ»Ò»Ñù£¬½ø¶øÆäSHA×ÔÈ»²»Ò»Ñù¡£

commitÁ´ÐγÉ

ÉÏÃæµÄ²Ù×÷£¬Ö»Éú³ÉÒ»¸öblob¶ÔÏó, Ò»¸ötree¶ÔÏó£¬Ò»¸öcommit¶ÔÏ󣬻¹Ã»·¨¿´µ½commitÁ´µÄÐγɹý³Ì¡£Òò´Ë£¬ÎªÁËÉú³ÉÁ´£¬ÎÒÃÇ»¹ÐèÒªÉú³ÉÁíÍâÒ»¸öcommit¶ÔÏó¡£½Ó×ÅʵÑé¡£

ÐÂÔöÎļþ£¬²¢Öظ´ÉÏÃæµÄ²Ù×÷µÄ¡£

itleaks@Itleaks:/tmp/test$ echo "second file">2.txt
itleaks@Itleaks:/tmp/test$ git hash-object -w 2.txt
1c59427adc4b205a270d8f810310394962e79a8b
itleaks@Itleaks:/tmp/test$ find .git/objects/ -type f
.git/objects/f7/bde89df6b5d8ea3fa3ccae0e3d53e8a5aa25d2
.git/objects/1c/59427adc4b205a270d8f810310394962e79a8b
.git/objects/be/976caf33466b3a9fbc04260139a992e5664b9c
.git/objects/94/1220dc97574b7dba7b22fdb21333c7227c9603
itleaks@Itleaks:/tmp/test$ git cat-file -t 1c59427adc4b205a270d8f810310394962e79a8b
blob
itleaks@Itleaks:/tmp/test$ git cat-file -p 1c59427adc4b205a270d8f810310394962e79a8b
second file
itleaks@Itleaks:/tmp/test$ git ls-files
test.txt
//Ô­À´µÄcache»¹ÔÚ£¬Òò´ËÖ»ÐèÌí¼ÓеÄblob¶ÔÏóµ½cacheÖÐÈ¥
itleaks@Itleaks:/tmp/test$ git update-index --add 2.txt
itleaks@Itleaks:/tmp/test$ git ls-files
2.txt
test.txt
itleaks@Itleaks:/tmp/test$ git write-tree
931fdc25cbc3e0afa6e34cf275693ade0daf2c73
itleaks@Itleaks:/tmp/test$ find .git/objects/ -type f
.git/objects/f7/bde89df6b5d8ea3fa3ccae0e3d53e8a5aa25d2
.git/objects/1c/59427adc4b205a270d8f810310394962e79a8b
.git/objects/93/1fdc25cbc3e0afa6e34cf275693ade0daf2c73
.git/objects/be/976caf33466b3a9fbc04260139a992e5664b9c
.git/objects/94/1220dc97574b7dba7b22fdb21333c7227c9603
itleaks@Itleaks:/tmp/test$ git cat-file -t 931fdc25cbc3e0afa6e34cf275693ade0daf2c73
tree
itleaks@Itleaks:/tmp/test$ git cat-file -p 931fdc25cbc3e0afa6e34cf275693ade0daf2c73
100644 blob 1c59427adc4b205a270d8f810310394962e79a8b 2.txt
100644 blob be976caf33466b3a9fbc04260139a992e5664b9c test.txt
//ÕâÀï¿ÉÒÔ¿´³ö£¬Õâ¸öÐÂÔöµÄtree¶ÔÏóÖ¸ÏòÁËÁ½¸öblob¶ÔÏó

½ÓÏÂÀ´¾ÍÊÇcommitÁ´ÐγɵÄÖØµãÁË£¬ÔÚÉú³Écommit¶ÔÏóʱ£¬ÓÐÒ»¸ö-p²ÎÊý£¬Õâ¸ö²ÎÊýÓÃÀ´Ö¸Ê¾ÐÂÉú³ÉµÄcommit¶ÔÏóµÄ¸¸Ç×commitµÄ¡£ÏÂÃæ¾ÍÀ´¿´¿´´øÕâ¸ö²ÎÊýºÍû´øÕâ¸ö²ÎÊýµÄÉú³ÉµÄcommit¶ÔÏóµÄ²î±ð

²»´ø-p²ÎÊýʱ

itleaks@Itleaks:/tmp/test$ echo "second commit"|git commit-tree 931fdc25cbc
2969683f04d3a32af0d6abf97f170190163b72e3
itleaks@Itleaks:/tmp/ test $ git cat-file -p 2969683f0
tree 931fdc25cbc3e0afa6e34cf275693ade0daf2c73
author itleaks <itleaks@126.com> 1403055500 +0800
committer itleaks <itleaks@126.com> 1403055500 +0800
second commit
itleaks@Itleaks:/tmp/test$ git show 2969683f04d3a
commit 2969683f04d3a32af0d6abf97f170190163b72e3
Author: itleaks <itleaks@126.com>
Date: Wed Jun 18 09:38:20 2014 +0800
second commit
diff --git a/2.txt b/2.txt
new file mode 100644
index 0000000..1c59427
--- /dev/null
+++ b/2.txt
@@ -0,0 +1 @@
+second file
diff --git a/test.txt b/test.txt
new file mode 100644
index 0000000..be976ca
--- /dev/null
+++ b/test.txt
@@ -0,0 +1 @@
+itleaks test
itleaks@Itleaks:/tmp/test$ git log 2969683f04d3a
commit 2969683f04d3a32af0d6abf97f170190163b72e3
Author: itleaks <itleaks@126.com>
Date: Wed Jun 18 09:38:20 2014 +0800
second commit
//û´ø-p²ÎÊýʱ£¬Õâ¸öеÄcommitÏ൱ÓÚÕâ´ÎcommitÒ»ÏÂ×ÓÔö¼ÓÁËÁ½¸öÎļþ
itleaks@Itleaks:/tmp/test$ git log 2969683f04d3a
commit 2969683f04d3a32af0d6abf97f170190163b72e3
Author: itleaks <itleaks@126.com>
Date: Wed Jun 18 09:38:20 2014 +0800
second commit
//ÕâÀïÖ»ÓÐÒ»Ìõcommit¼Ç¼

´ø-p²ÎÊýʱ

itleaks@Itleaks:/tmp/test$ echo "second commit2"|git commit-tree 931fdc25cbc -p f7bde89df6b5d8ea3f
c29d97b2a89c18bdc68f0812749c76fdadd477cf
itleaks@Itleaks:/tmp/test$ git cat-file -p c29d97b2a89c1
tree 931fdc25cbc3e0afa6e34cf275693ade0daf2c73
parent f7bde89df6b5d8ea3fa3ccae0e3d53e8a5aa25d2
author itleaks <itleaks@126.com> 1403055858 +0800
committer itleaks <itleaks@126.com> 1403055858 +0800
second commit2
itleaks@Itleaks:/tmp/test$ git show c29d97
commit c29d97b2a89c18bdc68f0812749c76fdadd477cf
Author: itleaks <itleaks@126.com>
Date: Wed Jun 18 09:44:18 2014 +0800
second commit2
diff --git a/2.txt b/2.txt
new file mode 100644
index 0000000..1c59427
--- /dev/null
+++ b/2.txt
@@ -0,0 +1 @@
+second file
//´øÁË-p²ÎÊýµÄcommit£¬ÏÔʾ³öÀ´µÄÐÞ¸ÄÖ»ÊÇÔö¼ÓÁË2.txtÎļþ
itleaks@Itleaks:/tmp/test$ git log c29d97
commit c29d97b2a89c18bdc68f0812749c76fdadd477cf
Author: itleaks <itleaks@126.com>
Date: Wed Jun 18 09:44:18 2014 +0800
second commit2
commit f7bde89df6b5d8ea3fa3ccae0e3d53e8a5aa25d2
Author: itleaks <itleaks@126.com>
Date: Wed Jun 18 08:45:27 2014 +0800
initial version
//ÕâÀ¿ÉÒÔ¿´µ½¡±second commit2"Ç°ÃæµÄcommitÊÇ¡± initial version¡±£¬Õâ¾ÍÊÇcommitÁ´

´Ë´Î²Ù×÷ºó¶ÔÏóͼÈçÏ£º

Branch¸üÐÂ

ÉÏÃæÐÂÔöÁËÁ½¸öcommit¶ÔÏóºó£¬ÏµÍ³²¢²»»á×Ô¶¯¸üÐÂbranchµÄÐÅÏ¢£¬ÐèÒªÓû§Ö÷¶¯¸üУ¬Í¨¹ýupdate-ref¼°Œ¡ÊµÏÖ£¬¾ßÌåʵÏÖÈçÏ£º

itleaks@Itleaks:/tmp/test$ git show master
commit f7bde89df6b5d8ea3fa3ccae0e3d53e8a5aa25d2
Author: itleaks <itleaks@126.com>
Date: Wed Jun 18 08:45:27 2014 +0800
initial version
diff --git a/test.txt b/test.txt
new file mode 100644
index 0000000..be976ca
--- /dev/null
+++ b/test.txt
@@ -0,0 +1 @@
+itleaks test
//brach master»¹Ã»ÓиüУ¬½ÓÏÂÀ´¸üÐÂ
itleaks@Itleaks:/tmp/test$ git update-ref refs/heads/master c29d97
itleaks@Itleaks:/tmp/test$ git log
commit c29d97b2a89c18bdc68f0812749c76fdadd477cf
Author: itleaks <itleaks@126.com>
Date: Wed Jun 18 09:44:18 2014 +0800
second commit2
commit f7bde89df6b5d8ea3fa3ccae0e3d53e8a5aa25d2
Author: itleaks <itleaks@126.com>
Date: Wed Jun 18 08:45:27 2014 +0800
initial version
//¿´µ½ÎÒÃÇÉÏÃæÌí¼ÓµÄ¡± second commit2¡± commitÁË

´Ë´Î²Ù×÷ºó¶ÔÏóͼÈçÏ£º


   
2625 ´Îä¯ÀÀ       27
Ïà¹ØÎÄÕÂ

ÿÈÕ¹¹½¨½â¾ö·½°¸
ÈçºÎÖÆ¶¨ÓÐЧµÄÅäÖùÜÀíÁ÷³Ì
ÅäÖùÜÀíÖ÷Òª»î¶¯¼°ÊµÏÖ·½·¨
¹¹½¨¹ÜÀíÈëÃÅ
Ïà¹ØÎĵµ

ÅäÖùÜÀíÁ÷³Ì
ÅäÖùÜÀí°×ƤÊé
CM09_CÅäÖùÜÀí±ê×¼
ʹÓÃSVN½øÐа汾¿ØÖÆ
Ïà¹Ø¿Î³Ì

ÅäÖùÜÀíʵ¼ù
ÅäÖùÜÀí·½·¨¡¢¹¤¾ßÓëÓ¦ÓÃ
¶à²ã´Î¼¯³ÉÅäÖùÜÀí
²úÆ··¢²¼¹ÜÀí
×îл¼Æ»®
DeepSeekÔÚÈí¼þ²âÊÔÓ¦ÓÃʵ¼ù 4-12[ÔÚÏß]
DeepSeek´óÄ£ÐÍÓ¦Óÿª·¢Êµ¼ù 4-19[ÔÚÏß]
UAF¼Ü¹¹ÌåϵÓëʵ¼ù 4-11[±±¾©]
AIÖÇÄÜ»¯Èí¼þ²âÊÔ·½·¨Óëʵ¼ù 5-23[ÉϺ£]
»ùÓÚ UML ºÍEA½øÐзÖÎöÉè¼Æ 4-26[±±¾©]
ÒµÎñ¼Ü¹¹Éè¼ÆÓ뽨ģ 4-18[±±¾©]


Èí¼þÅäÖùÜÀíµÄÎÊÌ⡢ĿµÄ
Èí¼þÅäÖùÜÀí¹æ·¶
CQWeb 7.1ÐÔÄܲâÊÔÓëµ÷ÓÅÖ¸ÄÏ
ΪʲôÐèҪʹÓÃClearCase
ClearCaseÓëRTCµÄ¼¯³É
ÀûÓÃClearQuest ½øÐвâÊÔ¹ÜÀí


²úÆ··¢²¼¹ÜÀí
ÅäÖùÜÀí·½·¨¡¢Êµ¼ù¡¢¹¤¾ß
¶à²ã´Î¼¯³ÉÅäÖùÜÀí
ʹÓÃCCÓëCQ½øÐÐÏîĿʵ¼ù
CVSÓëÅäÖùÜÀí
Subversion¹ÜÀíÔ±


ÅäÖùÜÀíʵ¼ù£¨´Ó×éÖ¯¼¶µ½ÏîÄ¿¼¶£©
ͨºÅÔº ÅäÖùÜÀí¹æ·¶ÓëÓ¦ÓÃ
ÅäÖùÜÀíÈÕ¹¹½¨¼°³ÖÐø¼¯³É
µ¤·ð˹ ClearCaseÓëÅäÖùÜÀí
ÖйúÒÆ¶¯ Èí¼þÅäÖùÜÀí
ÖйúÒøÐÐ Èí¼þÅäÖùÜÀí
Ìì½ò»ªÒíÀ¶Ìì¿Æ¼¼ ÅäÖùÜÀíÓëPvcs