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

1Ôª 10Ôª 50Ôª





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



  ÇóÖª ÎÄÕ ÎÄ¿â Lib ÊÓÆµ iPerson ¿Î³Ì ÈÏÖ¤ ×Éѯ ¹¤¾ß ½²×ù Model Center   Code  
»áÔ±   
   
 
     
   
 ¶©ÔÄ
  ¾èÖú
¶Ô±È Git Óë SVN£¬ÕâÆª½²µÄºÜÒ×¶®
 
  3648  次浏览      29
 2019-9-26
 
±à¼­ÍƼö:

±¾ÎÄÀ´×Ôcnblogs£¬ÎÄÕÂÖ÷Òª½éÉÜÁËÈçºÎͨ¹ý Git-SVN ¿ªÊ¼Ê¹Óà Git£¬²¢×Ü½áÆ½Ê±¹¤×÷¸ßƵÂÊʹÓõ½µÄ Git ³£ÓÃÃüÁî¡£

µ¼Óï

±¾ÎÄ´Ó Git Óë SVN µÄ¶Ô±ÈÈëÊÖ£¬½éÉÜÈçºÎͨ¹ý Git-SVN ¿ªÊ¼Ê¹Óà Git£¬²¢×Ü½áÆ½Ê±¹¤×÷¸ßƵÂÊʹÓõ½µÄ Git ³£ÓÃÃüÁî¡£

Ò»¡¢Git vs SVN

Git ºÍ SVN ÊëÓÅÊëºÃ£¬Ã¿¸öÈËÓв»Í¬µÄÌåÑé¡£

GitÊÇ·Ö²¼Ê½µÄ£¬SVNÊǼ¯ÖÐʽµÄ

ÕâÊÇ Git ºÍ SVN ×î´óµÄÇø±ð¡£ÈôÄÜÕÆÎÕÕâ¸ö¸ÅÄÁ½ÕßÇø±ð»ù±¾¸ã¶®´ó°ë¡£ÒòΪ Git ÊÇ·Ö²¼Ê½µÄ£¬ËùÒÔ Git Ö§³ÖÀëÏß¹¤×÷£¬ÔÚ±¾µØ¿ÉÒÔ½øÐкܶà²Ù×÷£¬°üÀ¨½ÓÏÂÀ´½«ÒªÖذõÍÆ³öµÄ·ÖÖ§¹¦ÄÜ¡£¶ø SVN ±ØÐëÁªÍø²ÅÄÜÕý³£¹¤×÷¡£

Git¸´ÔÓ¸ÅÄî¶à£¬SVN¼òµ¥Ò×ÉÏÊÖ

ËùÓÐÍ¬Ê±ÕÆÎÕ Git ºÍ SVN µÄ¿ª·¢Õß¶¼±ØÐë³ÐÈÏ£¬Git µÄÃüÁîʵÔÚÌ«¶àÁË£¬ÈÕ³£¹¤×÷ÐèÒªÕÆÎÕadd,commit,status,fetch,push,rebaseµÈ£¬ÈôÒªÊìÁ·ÕÆÎÕ£¬»¹±ØÐëÕÆÎÕrebaseºÍmergeµÄÇø±ð£¬fetchºÍpullµÄÇø±ðµÈ£¬³ý´ËÖ®Í⣬»¹ÓÐcherry-pick£¬submodule£¬stashµÈ¹¦ÄÜ£¬½öÊÇÕâЩÃû´ÊÌý×Ŷ¼ºÜÈÆ¡£

ÔÚÒ×ÓÃÐÔÕâ·½Ãæ£¬SVN »áºÃµÃ¶à£¬¼òµ¥Ò×ÉÏÊÖ£¬¶ÔÐÂÊÖºÜÓѺᣵ«ÊÇ´ÓÁíÍâÒ»·½Ãæ¿´£¬Git ÃüÁî¶àÒâζ׏¦Äܶ࣬ÈôÎÒÃÇÄÜÕÆÎÕ´ó²¿·Ö Git µÄ¹¦ÄÜ£¬Ìå»áµ½ÆäÖеİÂÃ»á·¢ÏÖÔÙÒ²»Ø²»È¥ SVN µÄʱ´úÁË¡£

Git·ÖÖ§Á®¼Û£¬SVN·ÖÖ§°º¹ó

ÔÚ°æ±¾¹ÜÀíÀ·ÖÖ§ÊǺܳ£Ê¹ÓõŦÄÜ¡£ÔÚ·¢²¼°æ±¾Ç°£¬ÐèÒª·¢²¼·ÖÖ§£¬½øÐдóÐèÇ󿪷¢£¬ÐèÒª feature ·ÖÖ§£¬´óÍŶӻ¹»áÓпª·¢·ÖÖ§£¬Îȶ¨·ÖÖ§µÈ¡£ÔÚ´óÍŶӿª·¢¹ý³ÌÖУ¬³£³£´æÔÚ´´½¨·ÖÖ§£¬Çл»·ÖÖ§µÄÐèÇó¡£

Git ·ÖÖ§ÊÇÖ¸ÕëÖ¸Ïòij´ÎÌá½»£¬¶ø SVN ·ÖÖ§ÊÇ¿½±´µÄĿ¼¡£Õâ¸öÌØÐÔʹ Git µÄ·ÖÖ§Çл»·Ç³£Ñ¸ËÙ£¬ÇÒ´´½¨³É±¾·Ç³£µÍ¡£

¶øÇÒ Git Óб¾µØ·ÖÖ§£¬SVN ÎÞ±¾µØ·ÖÖ§¡£ÔÚʵ¼Ê¿ª·¢¹ý³ÌÖУ¬¾­³£»áÓöµ½ÓÐЩ´úÂëûдÍ꣬µ«ÊÇÐè½ô¼±´¦ÀíÆäËûÎÊÌ⣬ÈôÎÒÃÇʹÓà Git£¬±ã¿ÉÒÔ´´½¨±¾µØ·ÖÖ§´æ´¢Ã»Ð´ÍêµÄ´úÂ룬´ýÎÊÌâ´¦ÀíÍêºó£¬Ôٻص½±¾µØ·ÖÖ§¼ÌÐøÍê³É´úÂë¡£

¶þ¡¢Git ºËÐĸÅÄî

Git ×îºËÐĵÄÒ»¸ö¸ÅÄî¾ÍÊǹ¤×÷Á÷¡£

¹¤×÷Çø(Workspace)ÊǵçÄÔÖÐʵ¼ÊµÄĿ¼¡£

ÔÝ´æÇø(Index)ÀàËÆÓÚ»º´æÇøÓò£¬ÁÙʱ±£´æÄãµÄ¸Ä¶¯¡£

²Ö¿âÇø(Repository)£¬·ÖΪ±¾µØ²Ö¿âºÍÔ¶³Ì²Ö¿â¡£

´Ó SVN Çл»µ½ Git£¬×îÄÑÀí½â²¢ÇÒ×î²»ÄÜÀí½âµÄÊÇÔÝ´æÇøºÍ±¾µØ²Ö¿â¡£ÊìÁ·Ê¹Óà Git ºó£¬»á·¢ÏÖÕâ¼òÖ±ÊÇÉñÉè¼Æ£¬ÓÉÓÚÕâÁ½ÕߵĴæÔÚ£¬Ê¹Ðí¶à¹¤×÷±äµÃÒ×¹ÜÀí¡£

ͨ³£Ìá½»´úÂë·ÖΪ¼¸²½£º

git add´Ó¹¤×÷ÇøÌá½»µ½ÔÝ´æÇø

git commit´ÓÔÝ´æÇøÌá½»µ½±¾µØ²Ö¿â

git push»ògit svn dcommit´Ó±¾µØ²Ö¿âÌá½»µ½Ô¶³Ì²Ö¿â

Ò»°ãÀ´Ëµ£¬¼ÇסÒÔÏÂÃüÁ±ã¿É½øÐÐÈÕ³£¹¤×÷ÁË£¨Í¼Æ¬À´Ô´ÓÚÍøÂ磩£º

[ GitÃüÁî ]

Èý¡¢Git-SVN³£ÓÃÃüÁî

±¾½ÚÃüÁîÕë¶ÔʹÓà Git-SVN µÄ¿ª·¢Õߣ¬ÇëÎñ±ØÕÆÎÕ¡£

Èô·þÎñÆ÷ʹÓÃµÄ SVN£¬µ«ÊDZ¾µØÏëÒªÌåÑé Git µÄ±¾µØ·ÖÖ§£¬ÀëÏß²Ù×÷µÈ¹¦ÄÜ£¬¿ÉÒÔʹÓà Git-SVN¹¦ÄÜ¡£

³£ÓòÙ×÷ÈçÏ£¨Í¼Æ¬À´Ô´ÓÚÍøÂ磩£º

[ Git-SVN ]

# ÏÂÔØÒ»¸ö SVN ÏîÄ¿ºÍËüµÄÕû¸ö´úÂëÀúÊ·£¬²¢³õʼ»¯Îª Git ´úÂë¿â
$ git svn clone -s [repository]
# ²é¿´µ±Ç°°æ±¾¿âÇé¿ö
$ git svn info
# È¡»ØÔ¶³Ì²Ö¿âËùÓзÖÖ§µÄ±ä»¯
$ git svn fetch
# È¡»ØÔ¶³Ì²Ö¿âµ±Ç°·ÖÖ§µÄ±ä»¯£¬²¢Óë±¾µØ·ÖÖ§±ä»ùºÏ²¢
$ git svn rebase
# ÉÏ´«µ±Ç°·ÖÖ§µÄ±¾µØ²Ö¿âµ½Ô¶³Ì²Ö¿â
$ git svn dcommit
# À­È¡Ð·ÖÖ§£¬²¢Ìá½»µ½Ô¶³Ì²Ö¿â
$ svn copy [remote_branch] [new_remote_branch] -m [message]
# ´´½¨Ô¶³Ì·ÖÖ§¶ÔÓ¦µÄ±¾µØ·ÖÖ§
$ git checkout -b [local_branch] [remote_branch]

ËÄ¡¢³õʼ»¯

´Ó±¾½Ú¿ªÊ¼£¬³ýÌØÊâ˵Ã÷£¬ÒÔÏÂÃüÁî¾ùÊÊÓÃÓÚ Git Óë Git-SVN¡£

# ÔÚµ±Ç°Ä¿Â¼Ð½¨Ò»¸öGit´úÂë¿â
$ git init
# ÏÂÔØÒ»¸öÏîÄ¿ºÍËüµÄÕû¸ö´úÂëÀúÊ· [Git only]
$ git clone [url]

Îå¡¢ÅäÖÃ

# ÁоÙËùÓÐÅäÖÃ
$ git config -l
# ΪÃüÁîÅäÖñðÃû
$ git config --global alias.co checkout
$ git config --global alias.ci commit
$ git config --global alias.st status
$ git config --global alias.br branch
# ÉèÖÃÌá½»´úÂëʱµÄÓû§ÐÅÏ¢
$ git config [--global] user.name "[name]"
$ git config [--global] user.email "[email address]"

Git Óû§µÄÅäÖÃÎļþλÓÚ ~/.gitconfig

Git µ¥¸ö²Ö¿âµÄÅäÖÃÎļþλÓÚ ~/$PROJECT_PATH/.git/config

Áù¡¢ÔöɾÎļþ

# Ìí¼Óµ±Ç°Ä¿Â¼µÄËùÓÐÎļþµ½ÔÝ´æÇø
$ git add .
# Ìí¼ÓÖ¸¶¨Îļþµ½ÔÝ´æÇø
$ git add <file1> <file2> ...
# Ìí¼ÓÖ¸¶¨Ä¿Â¼µ½ÔÝ´æÇø£¬°üÀ¨Æä×ÓĿ¼
$ git add <dir>
# ɾ³ý¹¤×÷ÇøÎļþ£¬²¢ÇÒ½«Õâ´Îɾ³ý·ÅÈëÔÝ´æÇø
$ git rm [file1] [file2] ...
# Í£Ö¹×·×ÙÖ¸¶¨Îļþ£¬µ«¸ÃÎļþ»á±£ÁôÔÚ¹¤×÷Çø
$ git rm --cached [file]
# ¸ÄÃûÎļþ£¬²¢ÇÒ½«Õâ¸ö¸ÄÃû·ÅÈëÔÝ´æÇø
$ git mv [file-original] [file-renamed]

°ÑÎļþÃû file1 Ìí¼Óµ½ .gitignore ÎļþÀGit »áÍ£Ö¹¸ú×Ù file1 µÄ״̬¡£

Æß¡¢·ÖÖ§

# ÁгöËùÓб¾µØ·ÖÖ§
$ git branch
# ÁгöËùÓб¾µØ·ÖÖ§ºÍÔ¶³Ì·ÖÖ§
$ git branch -a
# н¨Ò»¸ö·ÖÖ§£¬µ«ÒÀȻͣÁôÔÚµ±Ç°·ÖÖ§
$ git branch [branch-name]
# н¨Ò»¸ö·ÖÖ§£¬²¢Çл»µ½¸Ã·ÖÖ§
$ git checkout -b [new_branch] [remote-branch]
# Çл»µ½Ö¸¶¨·ÖÖ§£¬²¢¸üй¤×÷Çø
$ git checkout [branch-name]
# ºÏ²¢Ö¸¶¨·ÖÖ§µ½µ±Ç°·ÖÖ§
$ git merge [branch]
# Ñ¡ÔñÒ»¸ö commit£¬ºÏ²¢½øµ±Ç°·ÖÖ§
$ git cherry-pick [commit]
# ɾ³ý±¾µØ·ÖÖ§£¬-D ²ÎÊýÇ¿ÖÆÉ¾³ý·ÖÖ§
$ git branch -d [branch-name]
# ɾ³ýÔ¶³Ì·ÖÖ§
$ git push [remote] :[remote-branch]

°Ë¡¢Ìá½»

# Ìá½»ÔÝ´æÇøµ½²Ö¿âÇø
$ git commit -m [message]
# Ìá½»¹¤×÷ÇøÓëÔÝ´æÇøµÄ±ä»¯Ö±½Óµ½²Ö¿âÇø
$ git commit -a
# ÌύʱÏÔʾËùÓÐ diff ÐÅÏ¢
$ git commit -v
# Ìá½»ÔÝ´æÇøÐ޸ĵ½²Ö¿âÇø£¬ºÏ²¢µ½ÉÏ´ÎÐ޸쬲¢ÐÞ¸ÄÉϴεÄÌá½»ÐÅÏ¢
$ git commit --amend -m [message]
# ÉÏ´«±¾µØÖ¸¶¨·ÖÖ§µ½Ô¶³Ì²Ö¿â
$ git push [remote] [remote-branch]

¾Å¡¢À­È¡

# ÏÂÔØÔ¶³Ì²Ö¿âµÄËùÓб䶯 (Git only)
$ git fetch [remote]
# ÏÔʾËùÓÐÔ¶³Ì²Ö¿â (Git only)
$ git remote -v
# ÏÔʾij¸öÔ¶³Ì²Ö¿âµÄÐÅÏ¢ (Git only)
$ git remote show [remote]
# Ôö¼ÓÒ»¸öеÄÔ¶³Ì²Ö¿â£¬²¢ÃüÃû (Git only)
$ git remote add [remote-name] [url]
# È¡»ØÔ¶³Ì²Ö¿âµÄ±ä»¯£¬²¢Óë±¾µØ·ÖÖ§ºÏ²¢£¬(Git only), ÈôʹÓà Git-SVN£¬Çë²é¿´µÚÈý½Ú
$ git pull [remote] [branch]
# È¡»ØÔ¶³Ì²Ö¿âµÄ±ä»¯£¬²¢Óë±¾µØ·ÖÖ§±ä»ùºÏ²¢£¬(Git only), ÈôʹÓà Git-SVN£¬Çë²é¿´µÚÈý½Ú
$ git pull --rebase [remote] [branch]

Ê®¡¢³·Ïú

# »Ö¸´ÔÝ´æÇøµÄÖ¸¶¨Îļþµ½¹¤×÷Çø
$ git checkout [file]
# »Ö¸´ÔÝ´æÇøµ±Ç°Ä¿Â¼µÄËùÓÐÎļþµ½¹¤×÷Çø
$ git checkout .
# »Ö¸´¹¤×÷Çøµ½Ö¸¶¨ commit
$ git checkout [commit]
# ÖØÖÃÔÝ´æÇøµÄÖ¸¶¨Îļþ£¬ÓëÉÏÒ»´Î commit ±£³ÖÒ»Ö£¬µ«¹¤×÷Çø²»±ä
$ git reset [file]
# ÖØÖÃÔÝ´æÇøÓ빤×÷Çø£¬ÓëÉÏÒ»´Î commit ±£³ÖÒ»ÖÂ
$ git reset --hard
# ÖØÖõ±Ç°·ÖÖ§µÄÖ¸ÕëΪָ¶¨ commit£¬Í¬Ê±ÖØÖÃÔÝ´æÇø£¬µ«¹¤×÷Çø²»±ä
$ git reset [commit]
# ÖØÖõ±Ç°·ÖÖ§µÄHEADΪָ¶¨ commit£¬Í¬Ê±ÖØÖÃÔÝ´æÇøºÍ¹¤×÷Çø£¬ÓëÖ¸¶¨ commit Ò»ÖÂ
$ git reset --hard [commit]
# н¨Ò»¸ö commit£¬ÓÃÓÚ³·ÏúÖ¸¶¨ commit
$ git revert [commit]
# ½«Î´Ìá½»µÄ±ä»¯·ÅÔÚ´¢²ØÇø
$ git stash
# ½«´¢²ØÇøµÄÄÚÈݻָ´µ½µ±Ç°¹¤×÷Çø
$ git stash pop

ʮһ¡¢²éѯ

# ²é¿´¹¤×÷ÇøÎļþÐÞ¸Ä״̬
$ git status
# ²é¿´¹¤×÷ÇøÎļþÐ޸ľßÌåÄÚÈÝ
$ git diff [file]
# ²é¿´ÔÝ´æÇøÎļþÐÞ¸ÄÄÚÈÝ
$ git diff --cached [file]
# ²é¿´°æ±¾¿âÐ޸ļǼ
$ git log
# ²é¿´Ä³ÈËÌá½»¼Ç¼
$ git log --author=someone
# ²é¿´Ä³¸öÎļþµÄÀúÊ·¾ßÌåÐÞ¸ÄÄÚÈÝ
$ git log -p [file]
# ²é¿´Ä³´ÎÌá½»¾ßÌåÐÞ¸ÄÄÚÈÝ
$ git show [commit]

Ê®¶þ¡¢ÆäËû

дÔÚºóÃæ

´Ó SVN µ½ Git£¬³ý±¾ÎÄÁоٵĻù´¡¸ÅÄîºÍ³£ÓÃÃüÁ°üÀ¨µ«²»ÏÞÓÚÈçºÎ´Ó SVN ·þÎñÆ÷Çл»µ½ Git ·þÎñÆ÷£¬·ÖÖ§Ä£Ð͹ÜÀíµÈÒ²·Ç³£ÖØÒª¡£

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

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

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

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