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

1Ôª 10Ôª 50Ôª





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



  ÇóÖª ÎÄÕ ÎÄ¿â Lib ÊÓÆµ iPerson ¿Î³Ì ÈÏÖ¤ ×Éѯ ¹¤¾ß ½²×ù Model Center   Code  
»áÔ±   
   
 
     
   
 ¶©ÔÄ
  ¾èÖú
Git ¹ÜÀíʵ¼ù£¨Ò»£©£º¶à·ÖÖ§×ÓÄ£¿éÒÀÀµ¹ÜÀí
 
  9539  次浏览      29
 2019-1-17
 
±à¼­ÍƼö:

±¾ÎÄÀ´×Ôhahack£¬ÎÄÕ½éÉÜÁËÃæÏò¸´ÔÓ¹¤³ÌµÄ¼òµ¥»¯ Git ·ÖÖ§ÒÀÀµ¹ÜÀí·½°¸µÈÏà¹ØÖªÊ¶¡£

ÐèÇóÃèÊö

ÎÒÃdz¢ÊÔʹÓà Git À´Î¬»¤Ò»¸öÏîÄ¿µÄ´úÂë¡£Õâ¸öÏîÄ¿µÄ½á¹¹±È½Ï¸´ÔÓ£º

ÏîÄ¿°üº¬Óɶà¸ö×ÓÄ£¿é£¬Ã¿¸ö×ÓÄ£¿éÊÇÒ»¸ö¶ÀÁ¢µÄ Git ²Ö¿â£¬×ÓÄ£¿é»¹ÔÊÐí¼ÌÐøÇ¶Ì×°üº¬×ÓÄ£¿é¡£ ÀýÈ磬Ö÷¹¤³ÌÒÀÀµ common¡¢framework¡¢react_native µÈ¶à¸ö×ÓÄ£¿é£¬¶ø react_native ×ÓÄ£¿éÓÖÒÀÀµ node_modules¡¢HFCommon¡¢HFModules µÈ¶à¸öǶÌ××ÓÄ£¿é¡£

[-] app_android/
|-[+] HFUIKit
|-[+] channel
|-[+] common
|-[+] framework
|-[+] hybrid
|-[+] messagecenter
|-[-] react_native
|-[+] HFCommon
|-[+] HFModules
|-[+] node_modules

Ö÷¹¤³ÌºÍ×ÓÄ£¿éÔÊÐí´æÔÚ¶à¸ö·ÖÖ§£¬ÇÒÏ໥֮¼äÓÐÒÀÀµ¹ØÏµ¡£ÀýÈ磬Ö÷¹¤³ÌµÄ jilin ·Ö֧ͬʱÒÀÀµ common ×ÓÄ£¿éµÄ master ·ÖÖ§£¬ÒÔ¼° framework ×ÓÄ£¿éµÄ jilin ·ÖÖ§¡£

Git submodule µÄÎÊÌâ

Git ÌṩÁË submodule À´Ö§³Ö×ÓÄ£¿éµÄÐèÇó£¬Ê¹ÓÃËü¿ÉÒԺܷ½±ãµÄ½«¶à¸ö¶ÀÁ¢²Ö¿â°üº¬µ½Í¬Ò»¸öÖ÷¹¤³ÌÖУº

$ git init
$ git submodule add http://xxx.xxx/common.git
$ git submodule add http://xxx.xxx/framework.git

Git submodule »¹Ö§³ÖǶÌ×Ìí¼Ó×ÓÄ£¿é£º

$ git submodule add http://xxx.xxx/react_native.git
$ cd react_native
$ git submodule add http://xxx.xxx/HFCommon.git
$ git submodule add http://xxx.xxx/HFModules.git
$ git submodule add http://xxx.xxx/node_modules.git

ͨ¹ý×ÓÄ£¿é£¬ÕâЩ×ÓÄ£¿é¼È¿ÉÒÔ¸÷×Ô¶ÀÁ¢µÄÐ޸ĺÍÌá½»´úÂ룬ÓÖ¿ÉÒÔ½«¸Ä¶¯×÷Óõ½ÒÀÀµËüµÄ¸¸¹¤³Ì¡£ÕâÌýÆðÀ´ÊǸöºÜ°ôµÄÌØÐÔ£¬È»¶ø Git submodule Ò²´æÔÚ×ÅһЩÈÃÈË×¥¿ñµÄ¿Ó¡£

Ê×ÏÈ£¬Ö÷¹¤³Ì²¢²»Ö±½Ó¸ú×Ù×ÓÄ£¿éµÄ´úÂ룬¶ø½ö½öÖ»¸ú×Ù×ÓÄ£¿éµÄ commit id µÄ¸Ä¶¯¡£ÔÚÖ´ÐÐ git submodule update ¸üÐÂ×ÓÄ£¿é´úÂëʱ£¬Git ¾ÍÊǸù¾ÝÖ÷¹¤³ÌËùά»¤µÄ commit id À´¸üÐÂ×ÓÄ£¿éµ½Ö¸¶¨×´Ì¬µÄ¡£

bash-3.2$ git diff react_native
diff --git a/react_native b/react_native
index 3a9c5b1..ad68a28 160000
--- a/react_native
+++ b/react_native
@@ -1 +1 @@
-Subproject commit 3a9c5b14c45b199e2e6863d2b6da22dabc2a54f5
+Subproject commit ad68a28c13d4196df531c7df8523d07358288297
(END)

Òò´Ë£¬Èç¹ûÄãÖ»ÔÚ×ÓÄ£¿éÖÐÐ޸IJ¢Ìá½»ÁË´úÂ룬¶øÃ»Óе½Ö÷¹¤³ÌÉÏÃæÔÙ°Ñ×ÓÄ£¿éµÄ commit id Ìύһϣ¬ÆäËûÈËÀ­È¡¹¤³Ì´úÂëµÄʱºò»á·¢ÏÖ×ÓÄ£¿éµÄ´úÂëÒÀȻͣÁôÔÚÀ쵀 commit id ËùÖ¸ÏòµÄ״̬¡£¶ÔÓÚǶÌ××ÓÄ£¿é£¬ÕâÖÖ¹¤×÷ÓÈΪ·±Ëö£¬Ìá½»´úÂëºóÒªÖð²ãÍùÉÏÌá½» commit id £¬·ñÔòÆäËûÈËÎÞ·¨ÕýÈ·¸üдúÂë¡£

Æä´Î£¬ÈçÇ°ÃæËù˵£¬Ê¹Óà git submodule update ¸üÐÂ×ÓÄ£¿éºó£¬×ÓÄ£¿é½«±»Çл»µ½Ò»¸öÖ¸Ïò¸¸¹¤³Ìά»¤µÄ commit id ËùÖ¸¶¨µÄÓÎÀë״̬£º

bash-3.2$ git submodule update react_native
bash-3.2$ cd react_native
bash-3.2$ git branch
* (detached from 3a9c5b1)
master
jilin
TaiShan

Ò»µ©´úÂë´¦ÓÚÓÎÀë·ÖÖ§£¬Äã¾ÍҪʱ¿Ì¾¯ÌèÔÚÓÎÀë·ÖÖ§ÉϵÄÌá½»ÓÐûÓм´Ê±ºÏ²¢µ½·ÇÓÎÀë·ÖÖ§ÉÏ¡£Èç¹ûÄãÖ±½ÓÔÚÓÎÀë·ÖÖ§ÉÏ¿ª·¢²¢Ìá½»ÁË´úÂ룬֮ºóÔÚ¸¸¹¤³ÌÀïÔÙ´Î git submodule update £¬ÄãËùÓÐδºÏ²¢µÄÌá½»¶¼»á¶ªÊ§£¡

×îºó»¹ÓÐÒ»¸ö·Ç³£Âé·³£¬µ«Ò²¼«ÈÝÒ׳öÏÖµÄÎÊÌ⣺Èç¹ûÍŶÓÀïÓÐÈËÖ»Ìá½»ÁËÖ÷¹¤³Ì¸Ã×ÓÄ£¿éµÄ commit id £¬È´ÍüÁ˽øÈë¸ÃÄ£¿éÌύģ¿éÕæÕýµÄ´úÂ룬ÄÇôµ±ÍÆË͵½ÖÐÑë²Ö¿âÖ®ºó£¬ÆäËûÈ˾ͻáÒòΪÕÒ²»µ½Óë¸Ã commit id ¶ÔÓ¦µÄ´úÂë¶øÎÞ·¨ÕýÈ·¸üдúÂ룺

bash-3.2$ git submodule update
error: pathspec 'ad68a28c13d4196df531c7df8523d07358288297' did not match any file(s) known to git.
Did you forget to 'git add'?
Unable to checkout 'ad68a28c13d4196df531c7df8523d07358288297' in submodule path 'react_native'

¶ÔÓÚÊìÁ·µÄÓû§£¬ÕâЩ¿Ó×ÔÈ»¿ÉÒÔÇáËÉÔ½¹ý¡£µ«¿¼Âǵ½ÍŶÓÀï´ó¶¼ÊÇ Git ÐÂÊÖ£¬ÎÒÃÇ·¢ÏÖ×ÓÄ£¿éµÄÒýÈë¶ÔËûÃÇÔì³ÉÁ˺ܴóµÄ¸ºµ££¬Æµ·±³öÏÖ×ÓÄ£¿é´úÂëûÓиüе½×îÐÂ״̬£¬»òÕ߸üгö´íµÄÇé¿ö¡£

¼òµ¥½â¾ö·½°¸

¾­¹ý¿¼ÂÇ£¬ÎÒÃǾö¶¨¶Ô×ÓÄ£¿éµÄʹÓÃ×öЩ¼ò»¯£º

ËùÓÐ×ÓÄ£¿é²»ÔÙ¸ù¾Ý¸¸¹¤³ÌµÄ commit id ¸üдúÂ룬¶øÊÇÖ±½Ó¸üе½Ö÷¹¤³ÌËùÒÀÀµµÄ·ÖÖ§µÄ×îÐÂÒ»´ÎÌá½»£»

ÓÉÓÚ commit id ²»ÔÙÓÃÀ´¸üдúÂ룬Òò´Ë¿ÉÒÔ½ûÖ¹Ö±½ÓÌá½»×ÓÄ£¿éµÄ commit id £¬±ÜÃâ³öÏÖÖ»Ìá½»×ÓÄ£¿é commit id ¶øÍü¼ÇÌá½»×ÓÄ£¿é´úÂëµÄÇé¿ö¡£

Ôì¸öÂÖ×Ó£ºfmanager

ΪÁË´ïµ½µÚÒ»¸öÄ¿µÄ£¬ÎÒÃÇ×Ô¼ºÐ´Á˸öרÓõĹÜÀí¹¤¾ß fmanager ¡£Ä¿Ç°ËüÒ»¹²Ö§³ÖÈçϼ¸¸ö¹¦ÄÜ£¬²¢ÇÒÔÚ²»¶ÏÀ©Õ¹ÖУº

1 fmanager pull #¸üе±Ç°·ÖÖ§µÄÖ÷¹¤³Ì£¬²¢½«Ã¿¸ö×ÓÄ£¿éµÄ´úÂë¸üе½Ö¸¶¨·ÖÖ§µÄ×îÐÂ״̬¡£

2 fmanager update # ./fmanager pull µÄ±ðÃû

3 fmanager checkout <·ÖÖ§Ãû> # Çл»µ½Ä³¸öÖ÷¹¤³Ì·ÖÖ§£¬Í¬Ê±Íê³É×ÓÄ£¿éµÄ´úÂëÇл»¡£

4 fmanager submodule update <Ä£¿éÃûÁбí> # ¸üÐÂÖ¸¶¨×ÓÄ£¿éµÄ´úÂëµ½Ëù´¦·ÖÖ§µÄ×îÐÂ×´¡£

5 fmanager showbranch # ²é¿´µ±Ç°Ö÷¹¤³ÌºÍËùÓÐ×ÓÄ£¿éµÄËùÊô·ÖÖ§¡£

6 fmanager status # ²é¿´µ±Ç°Ö÷¹¤³ÌºÍËùÓÐ×ÓÄ£¿éµÄÐÞ¸Ä״̬¡£

7 fmanager log # ²é¿´µ±Ç°Ö÷¹¤³ÌºÍËùÓÐ×ÓÄ£¿éµÄµ±Ç°·ÖÖ§/±êÇ©ºÍ×îÐÂÌá½»¡£

8 fmanager cherry-pick <commit id> <·ÖÖ§Áбí> cherry-pick ij¸ö commit id µ½·ÖÖ§ÁÐ±í¡£

9 fmanager cherry-push <commit id> <·ÖÖ§Áбí> cherry-pick ij¸ö commit id µ½·ÖÖ§ÁÐ±í£¬²¢ÍÆËÍÕâЩ·ÖÖ§¡£

Õâ¸ö¹¤¾ßÖ±½ÓÄÚÖÃÔÚÖ÷¹¤³ÌµÄ¸ù·¾¶£¬²¢ÇÒ½ÓÊÜÒ»¸ö json ¸ñʽµÄÅäÖÃÎļþ modules.json £¬¸ÃÅäÖÃÎļþ´ó¸Å³¤ÕâÑù£º

{
"sub": {
"app": {"branch": "master_dev"},
"common": {"branch": "master_dev"},
"fmall": {"branch": "master"},
"framework": {"branch": "jilin"},
"fund": {"branch": "master_dev"},
"hybrid": {"branch": "master_dev"},
"messagecenter": {"branch": "master"},
"property": {"branch": "master"},
"safetykeyboardnew": {"branch": "master"},
"scores": {"branch": "master"},
"thirdparty": {"branch": "master_dev"},
"react_native": {"branch": "jilin"},
"react_native/HFModules": {"branch": "jilin"},
"react_native/HFCommon": {"branch": "master_dev"},
"react_native/node_modules": {"branch": "master"}
}
}

²»Í¬µÄÖ÷¹¤³Ì·ÖÖ§£¬modules.json ÅäÖÃÎļþµÄÄÚÈÝÔÊÐí²»Í¬£¬ÇÒÿ¸öÄ£¿é¶¼ÔÊÐíÖ¸¶¨²»Í¬·ÖÖ§¡£¶ÔÓÚǶÌ××ÓÄ£¿é£¬ÎÒÃÇͨ¹ý¼ÓÉϸ¸Ä£¿éǰ׺À´×ö±êʶ¡£

µ±Ê¹Óà fmanager Çл»·Ö֧ʱ£¬fmanager ½«Ê×ÏÈÍê³ÉÖ÷¹¤³ÌµÄ·ÖÖ§Çл»£¬È»ºó¶ÁÈë¸Ã·ÖÖ§Ï嵀 modules.json £¬ÔÙ¸ù¾Ý modules.json µÄÅäÖÃÖð¸öÇл»µ½¸÷×ÔÄ£¿éµÄÖ¸¶¨·ÖÖ§¡£

ʹÓà fmanager ¸üй¤³ÌºÍÇл»·ÖÖ§ÏàËÆ£¬Ö»ÊÇ˳±ãÍê³ÉÁË×ÓÄ£¿éµÄ git pull ²Ù×÷¡£

ÕâÑùµÄ×ÓÄ£¿é¹ÜÀí²ßÂÔ¿´ÆðÀ´Óе㡰¼¤½ø¡±£ºÓÀԶʹÓ÷ÖÖ§×îеĴúÂë״̬¡£ÎªÁ˱£Ö¤Îȶ¨ÐÔ£¬ÎÒÃÇ»¹Ö§³ÖÔÚ modules.json ÖÐʹÓà tag £º

{
"sub": {
"app": {"tag": "2.0.1"},
"common": {"tag": "2.0.1"},
"fmall": {"tag": "2.0.1"},
"framework": {"tag": "jilin-2.0.1"},
"fund": {"tag": "2.0.1"},
"hybrid": {"tag": "2.0.1"},
"messagecenter": {"tag": "2.0.1"},
"property": {"tag": "2.0.1"},
"safetykeyboardnew": {"tag": "2.0.1"},
"scores": {"tag": "2.0.1"},
"thirdparty": {"tag": "2.0.1"},
"react_native": {"tag": "jilin-2.0.1"},
"react_native/HFModules": {"tag": "jilin-2.0.1"},
"react_native/HFCommon": {"tag": "2.0.1"},
"react_native/node_modules": {"tag": "2.0.1"}
}
}

ÔÚÏîÄ¿ºóÆÚ£¬¿ÉÒÔͨ¹ýÒýÓñêÇ©À´±£³ÖÕû¸ö¹¤³ÌµÄÎȶ¨ÐÔ¡£Í¬Ê±£¬¸ºÔð´ò°üµÄ»úÆ÷ÿ´Î´ò°üʱ£¬¶¼»á˳±ãÖ´ÐÐ fmanager log ²ú³öÒ»·Ý°üº¬µ±Ç°ËùÓÐ×ÓÄ£¿éËù´¦·ÖÖ§ºÍ×îÐÂÒ»´Î commit µÄ¼Ç¼£¬·½±ã×·²éÎÊÌâ¡£

¼Ó¸ö¹³×Ó£ºpre-commit

Òª´ïµ½µÚ¶þ¸öÄ¿µÄ£¬¿ÉÒÔͨ¹ý±àд±¾µØ¹³×Ó pre-commit À´ÊµÏÖ¡£¸Ã¹³×Ó¿ÉÒÔÓÃÀ´ÔÚ commit ǰ½øÐÐһЩ¼ì²é¹¤×÷£¬²¢¾Ü¾øÒ»Ð©²»ºÏ·¨µÄÌá½»¡£Õë¶ÔÎÒÃǵÄÐèÇ󣬿ÉÒÔдһ¸ö½Å±¾¼ì²éÌá½»ÖÐÊÇ·ñ°üº¬ commit id µÄÐ޸ģ¬Èç¹ûÓУ¬¾ÍÏÈÖØÖÃÄÇЩÐÞ¸ÄÔÙÌύʣϵÄÄÚÈÝ¡£

#!/usr/bin/python
# coding: utf-8
import sys,os,io,subprocess,json,re
reload(sys)
sys.setdefaultencoding('utf8')
error_color = "\033[31m"
warning_color = "\033[33m"
normal_color = "\033[0m"
def getRootPath():
# ÕÒµ½¹¤³Ì¸ùĿ¼
git_path = ".git"
pwd = os.getcwd()
while True:
if os.path.exists(os.path.join(pwd, git_path)) and os.path.isdir(os.path.join(pwd, git_path)):
return os.path.abspath(pwd)
else:
if (os.path.exists(os.path.join(pwd, "../"))):
pwd = os.path.join(pwd, "../")
else:
return None
def getSubmoduleNameAndPath():
'''»ñÈ¡×ÓÄ£¿éÐÅÏ¢'''
root_path = getRootPath()
if root_path != None:
output = subprocess.Popen(['git submodule --quiet foreach \'echo $toplevel/$path\''], stdout=subprocess.PIPE, shell=True)
oc = output.communicate() #È¡³öoutputÖеÄ×Ö·û´®
submodule_dict = {}
for element in oc:
if element != None:
sb_list = element.split('\n')
for elem in sb_list:
if (elem != ""):
path = elem.strip()
name = path.replace(root_path+"/", '')
submodule_dict[name] = path
return submodule_dict
else:
print(warning_color)
print('''
¾¯¸æ£º¼ì²âµ½µ±Ç°¹¤³Ì²»ÊÇ .git ¹¤³Ì£¬ÎļþĿ¼¿ÉÄÜÒѾ­Ë𻵣¡
''')
print(normal_color)
os.chdir(pwd)
return False
def checkSubModule():
'''·ÀÖ¹Ìá½»×ÓÄ£¿éµÄ commit id'''
pwd = os.getcwd()
submodule_dict = getSubmoduleNameAndPath()
# ÅжÏÿ¸ö×ÓÄ£¿éÊÇ·ñÐÞ¸ÄÁËcommit id
for module_name, module_path in submodule_dict.items():
os.chdir(os.path.join(module_path, ".."))
module_basepath = os.path.basename(module_path)
output = subprocess.Popen(['git diff --cached ' + module_basepath], stdout=subprocess.PIPE, shell=True)
oc = output.communicate()[0]
# ÅжÏÊÇ·ñÌá½»ÁË commit id ÐÞ¸Ä
if oc.find("-Subproject commit") >= 0 and oc.find("+Subproject commit") >= 0:
print(warning_color)
print('''
¼ì²éµ½×ÓÄ£¿é %s Ìá½»ÁË commit id£¬
ÎÒÃÇÇ¿ÁÒ½¨Òé**²»Òª**Ìá½»×ÓÄ£¿éµÄ commit id ¸Ä¶¯£¡¸Ã commit id ½«±»Ìø¹ýÌá½»¡£
''' % module_name)
print(normal_color)
res = subprocess.call(['git', 'reset', 'HEAD', module_basepath])
if res == 0:
print("×ÓÄ£¿é " + module_name + " µÄ commit id ÖØÖóɹ¦£¡")
else:
print(error_color)
print("×ÓÄ£¿é " + module_name + " µÄ commit id ÖØÖÃʧ°Ü£¡")
print(normal_color)
os.chdir(pwd)
return False
os.chdir(pwd)
return True
if checkSubModule():
exit(0)
else:
exit(1)

¹³×Ó±àдÍ꣬»¹µÃ½â¾ö°²×°ÎÊÌâ¡£Ëùν¡°°²×°¡±£¬¼´Êǽ« pre-commit ¸´ÖƵ½¸ùĿ¼ÖÐµÄ .git/hooks Ŀ¼ÖУ¬²¢È·±£¿ÉÖ´ÐС£ÌýÆðÀ´ºÃÏñºÜ¼òµ¥£¬ÊµÔò²»È»£º

.git ÀïµÄÄÚÈݲ¢²»»áËæ²Ö¿âһͬÌá½»¡£ÐèÒªÁíÍâÏëÆäËû°ì·¨ÈÃÍŶӯäËûÈË¡°ÉϹ³¡±£¬²¢±£³Ö¹³×ÓµÄͬ²½¡£

¸¸¹¤³ÌµÄ¹³×Ó²»»á±»¼Ì³Ðµ½×ÓÄ£¿é£¬Ò²¾ÍÊÇ˵£¬Èç¹ûÄãÏ£ÍûÒ»¸ö¹³×ÓÔÚ¸¸¹¤³ÌºÍ¶à¸ö×ÓÄ£¿éÖÐÓõ½£¬ÄÇÄãÐèҪΪÿ¸ö²Ö¿â¶¼Ìí¼ÓÒ»´Î¹³×Ó¡£

fmanager °ïÎÒÃǽâ¾öÁ˵ÚÒ»¸öÎÊÌ⣬ÓÉÓÚÎÒÃÇÓÃ×Ô¼ºÔìµÄ fmanager À´¸üй¤³Ì´úÂ룬Òò´Ë¿ÉÒÔÈà fmanager ÔÚ¸üеÄʱºò×Ô¶¯Íê³É¹³×ӵݲװ¡£

¶øÍ¨¹ý¹Û²ì .git µÄÎļþ½á¹¹£¬ÎÒ·¢ÏÖÿ¸ö×ÓÄ£¿éÔÚ .git/modules Öи÷×ÔÓµÓÐÒ»¸öרÊôµÄÊý¾ÝĿ¼¡£Õâ¸öÊý¾ÝĿ¼ÏÂÒ²ÓÐÒ»¸ö hooks Ŀ¼£¬¸Ã×ÓÄ£¿éµÄ¹³×Ó¾ÍÓ¦¸Ã°²×°µ½ÕâÀï¡£ Èç¹ûÓÐǶÌ××ÓÄ£¿é£¬¸¸Ä£¿éµÄÊý¾ÝĿ¼Ï»¹»áÓÐ modules Ŀ¼£¬²¢ÇÒ¿ÉÒÔÒ»Ö±ÕâôǶÌ×ÏÂÈ¥¡£

½â¾öÕâÁ½¸öÎÊÌâºó£¬¹³×Ó˳Àû°²×°µ½ÁËÿ¸öÍŶӳÉÔ±µÄ²Ö¿âÖУ¬²¢ÇÒ»¹ÄÜʱ¿Ì±£³Öͬ²½¡£Ò»µ©ÓÐÈËÊÔͼÌá½» commit id µÄÐ޸ģ¬¾Í»á³öÏÖÈçϵĴíÎó£º

ÀûÓà pre-commit ¹³×ÓʵÏÖÌø¹ý commit id Ìá½»

¶øÆäËûÄÚÈݵÄÐÞ¸ÄÒÀÈ»¿ÉÒÔÕý³£Ìá½»¡£

pre-commit ¹³×ӷdz£ÓÐÓã¬ÎÒÃÇÂ½ÐøÓÖÌí¼ÓÁËÖîÈç´úÂë·ç¸ñ¼ì²é¡¢json ºÏ·¨ÐÔ¼ì²é¡¢commit ÓÊÏäºÏ·¨ÐÔ¼ì²éµÈ²âÊÔ¡£

×ܽá

ͨ¹ý±¾Îĵķ½·¨£¬ÎÒÃǶÔ×ÓÄ£¿éµÄʹÓýøÐÐÁ˼ò»¯£¬±ÜÃâÁËÓÉÓÚ©Ìá½»×ÓÄ£¿é commit id »ò×ÓÄ£¿é´úÂëµ¼ÖÂÎÞ·¨¸üлò¸üдíÎóµÄÇé¿ö¡£Õâô×ö¿´ÆðÀ´ºÃÏñÍêÈ«ÅׯúÁË×ÓÄ£¿éµÄ commit id £¬µ«ÔÚÏÂÃæµÄÎÄÕÂÖУ¬ÎÒ½«½éÉÜÒ»ÖÖ×Ô¶¯¸üÐÂ×ÓÄ£¿é commit id µÄ·½·¨£¬¸Ã·½·¨½«ÀûÓà commit id ×Ô¶¯´¥·¢Õë¶Ô×ÓÄ£¿éµÄ³ÖÐø¼¯³É²âÊÔ¡£

 
   
9539 ´Îä¯ÀÀ       29
Ïà¹ØÎÄÕÂ

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

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

ÅäÖùÜÀíʵ¼ù
ÅäÖùÜÀí·½·¨¡¢¹¤¾ßÓëÓ¦ÓÃ
¶à²ã´Î¼¯³ÉÅäÖùÜÀí
²úÆ··¢²¼¹ÜÀí