å¦‚æžœä½ æ˜¯ä¸€æžšCoderï¼Œä½†æ˜¯ä½ ä¸�知é�“Githubï¼Œé‚£ä¹ˆæˆ‘è§‰çš„ä½ å°±ä¸�是一个è�œé¸Ÿçº§åˆ«çš„Coderï¼Œå› ä¸ºä½ åŽ‹æ ¹ä¸�是真æ£Coderï¼Œä½ å�ªæ˜¯ä¸€ä¸ªCodeæ�¬è¿�工。
ä½†æ˜¯ä½ å¦‚æžœå·²ç»�åœ¨è¯»è¿™ç¯‡æ–‡ç« äº†ï¼Œæˆ‘è§‰çš„ä½ å·²ç»�知é�“Github了。
æ£æ˜¯Github,让社会化编程æˆ�为现实。
什么是 Github?
github是一个基于git的代ç �托管平å�°ï¼Œä»˜è´¹ç”¨æˆ·å�¯ä»¥å»ºç§�人仓库,我们一般的å…�费用户å�ªèƒ½ä½¿ç”¨å…¬å…±ä»“库,也就是代ç �è¦�公开。
Github 由Chris Wanstrath, PJ Hyett 与Tom Preston-Werner三�开�者在2008年4月创办。迄今拥有59�全�员工,主��供基于git的版本托管�务。
ç›®å‰�看æ�¥ï¼ŒGitHub这场冒险已ç»�èƒœå‡ºã€‚æ ¹æ�®æ�¥è‡ªç»´åŸºç™¾ç§‘关于GitHubçš„æ��述,我们å�¯ä»¥å½¢è±¡åœ°çœ‹å‡ºGitHub的增长速度:
今天,GitHub已是:
- 一个拥有143万开å�‘者的社区。其ä¸ä¸�ä¹�Linuxå�‘明者Torvaldsè¿™æ ·çš„é¡¶çº§é»‘å®¢ï¼Œä»¥å�ŠRails创始人DHHè¿™æ ·çš„å¹´è½»æž�客。
- 这个星ç�ƒä¸Šæœ€æµ�行的开æº�托管æœ�务。目å‰�已托管431万git项目,ä¸�ä»…è¶Šæ�¥è¶Šå¤šçŸ¥å��å¼€æº�项目è¿�å…¥GitHub,比如Ruby on Railsã€�jQueryã€�Rubyã€�Erlang/OTP;近三年æµ�行的开æº�库往往在GitHub首å�‘,例如:BootStrapã€�Node.jsã€�CoffeScriptç‰ã€‚
- alexa全�排�414的网站。
注册账户以�创建仓库
è¦�想使用github第一æ¥å½“然是注册githubè´¦å�·äº†ï¼Œ github官网地å�€ï¼šhttps://github.com/。 之å�Žå°±å�¯ä»¥åˆ›å»ºä»“库了(å…�费用户å�ªèƒ½å»ºå…¬å…±ä»“库),Create a New Repository,填好å��ç§°å�ŽCreate,之å�Žä¼šå‡ºçŽ°ä¸€äº›ä»“åº“çš„é…�置信æ�¯ï¼Œè¿™ä¹Ÿæ˜¯ä¸€ä¸ªgit的简å�•教程。
Github 安装
�置Git
首先在本地创建ssh key;
$ ssh-keygen -t rsa -C "your_email@youremail.com"
å�Žé�¢çš„your_email@youremail.comæ”¹ä¸ºä½ åœ¨github上注册的邮箱,之å�Žä¼šè¦�求确认路径和输入密ç �,我们这使用默认的一路回车就行。æˆ�功的è¯�会在~/下生æˆ�.ssh文件夹,进去,打开id_rsa.pub,å¤�制里é�¢çš„key。
回到github上,进入 Account Settings(账户é…�置),左边选择SSH Keys,Add SSH Key,titleéš�ä¾¿å¡«ï¼Œç²˜è´´åœ¨ä½ ç”µè„‘ä¸Šç”Ÿæˆ�çš„key。
为了验�是��功,在git bash下输入:
$ ssh -T git@github.com
如果是第一次的会�示是�continue,输入yes就会看到:You've successfully authenticated, but GitHub does not provide shell access 。这就表示已�功连上github。
接下æ�¥æˆ‘们è¦�å�šçš„å°±æ˜¯æŠŠæœ¬åœ°ä»“åº“ä¼ åˆ°github上去,在æ¤ä¹‹å‰�还需è¦�设置usernameå’Œemailï¼Œå› ä¸ºgithubæ¯�次commit都会记录他们。
$ git config --global user.name "your name" $ git config --global user.email "your_email@youremail.com"
进入è¦�ä¸Šä¼ çš„ä»“åº“ï¼Œå�³é”®git bashï¼Œæ·»åŠ è¿œç¨‹åœ°å�€ï¼š
$ git remote add origin git@github.com:yourName/yourRepo.git
å�Žé�¢çš„yourNameå’ŒyourRepoè¡¨ç¤ºä½ å†�github的用户å��和刚æ‰�æ–°å»ºçš„ä»“åº“ï¼ŒåŠ å®Œä¹‹å�Žè¿›å…¥.git,打开config,这里会多出一个remote "origin"内容,这就是刚æ‰�æ·»åŠ çš„è¿œç¨‹åœ°å�€ï¼Œä¹Ÿå�¯ä»¥ç›´æŽ¥ä¿®æ”¹configæ�¥é…�置远程地å�€ã€‚
创建新文件夹,打开,然�执行
git init
以创建新的 git 仓库。
检出仓库
执行如下命令以创建一个本地仓库的克隆版本:
git clone /path/to/repository
如果是远端æœ�åŠ¡å™¨ä¸Šçš„ä»“åº“ï¼Œä½ çš„å‘½ä»¤ä¼šæ˜¯è¿™ä¸ªæ ·å�:
git clone username@host:/path/to/repository
工作�
ä½ çš„æœ¬åœ°ä»“åº“ç”± git 维护的三棵"æ ‘"组æˆ�ã€‚ç¬¬ä¸€ä¸ªæ˜¯ä½ çš„ 工作目录,它æŒ�有实际文件;第二个是 æš‚å˜åŒºï¼ˆIndex),它åƒ�个缓å˜åŒºåŸŸï¼Œä¸´æ—¶ä¿�å˜ä½ 的改动;最å�Žæ˜¯ HEAD,它指å�‘ä½ æœ€å�Žä¸€æ¬¡æ��交的结果。
ä½ å�¯ä»¥æ��å‡ºæ›´æ”¹ï¼ˆæŠŠå®ƒä»¬æ·»åŠ åˆ°æš‚å˜åŒºï¼‰ï¼Œä½¿ç”¨å¦‚下命令:
git add <filename>
git add *
这是 git 基本工作æµ�程的第一æ¥ï¼›ä½¿ç”¨å¦‚下命令以实际æ��交改动:
git commit -m "代ç �æ��交信æ�¯"
çŽ°åœ¨ï¼Œä½ çš„æ”¹åŠ¨å·²ç»�æ��交到了 HEADï¼Œä½†æ˜¯è¿˜æ²¡åˆ°ä½ çš„è¿œç«¯ä»“åº“ã€‚
推�改动
ä½ çš„æ”¹åŠ¨çŽ°åœ¨å·²ç»�在本地仓库的 HEAD ä¸äº†ã€‚执行如下命令以将这些改动æ��交到远端仓库:
git push origin master
å�¯ä»¥æŠŠ master æ�¢æˆ�ä½ æƒ³è¦�推é€�的任何分支。
å¦‚æžœä½ è¿˜æ²¡æœ‰å…‹éš†çŽ°æœ‰ä»“åº“ï¼Œå¹¶æ¬²å°†ä½ çš„ä»“åº“è¿žæŽ¥åˆ°æŸ�个远程æœ�åŠ¡å™¨ï¼Œä½ å�¯ä»¥ä½¿ç”¨å¦‚ä¸‹å‘½ä»¤æ·»åŠ ï¼š
git remote add origin <server>
如æ¤ä½ å°±èƒ½å¤Ÿå°†ä½ çš„æ”¹åŠ¨æŽ¨é€�åˆ°æ‰€æ·»åŠ çš„æœ�务器上去了。
分支
分支是用æ�¥å°†ç‰¹æ€§å¼€å�‘ç»�缘开æ�¥çš„ã€‚åœ¨ä½ åˆ›å»ºä»“åº“çš„æ—¶å€™ï¼Œmaster 是"默认的"分支。在其他分支上进行开å�‘,完æˆ�å�Žå†�将它们å�ˆå¹¶åˆ°ä¸»åˆ†æ”¯ä¸Šã€‚
创建一个��"feature_x"的分支,并切�过去:
git checkout -b feature_x
切�回主分支:
git checkout master
å†�æŠŠæ–°å»ºçš„åˆ†æ”¯åˆ æŽ‰ï¼š
git branch -d feature_x
除é�žä½ 将分支推é€�到远端仓库,ä¸�然该分支就是 ä¸�为他人所è§�的:
git push origin <branch>
更新与�并
è¦�æ›´æ–°ä½ çš„æœ¬åœ°ä»“åº“è‡³æœ€æ–°æ”¹åŠ¨ï¼Œæ‰§è¡Œï¼š
git pull
ä»¥åœ¨ä½ çš„å·¥ä½œç›®å½•ä¸ èŽ·å�–(fetch) å¹¶ å�ˆå¹¶ï¼ˆmerge) 远端的改动。
è¦�å�ˆå¹¶å…¶ä»–åˆ†æ”¯åˆ°ä½ çš„å½“å‰�分支(例如 master),执行:
git merge <branch>
在这两�情况下,git 都会�试去自动�并改动。�憾的是,这�能并��次都�功,并�能出现冲�(conflicts)。
这时候就需è¦�ä½ ä¿®æ”¹è¿™äº›æ–‡ä»¶æ�¥æ‰‹åЍå�ˆå¹¶è¿™äº›å†²çª�(conflicts)。改完之å�Žï¼Œä½ 需è¦�æ‰§è¡Œå¦‚ä¸‹å‘½ä»¤ä»¥å°†å®ƒä»¬æ ‡è®°ä¸ºå�ˆå¹¶æˆ�功:
git add <filename>
在å�ˆå¹¶æ”¹åЍ之å‰�ï¼Œä½ å�¯ä»¥ä½¿ç”¨å¦‚下命令预览差异:
git diff <source_branch> <target_branch>
æ ‡ç¾
为软件å�‘å¸ƒåˆ›å»ºæ ‡ç¾æ˜¯æŽ¨è��的。这个概念早已å˜åœ¨ï¼Œåœ¨ SVN ä¸ä¹Ÿæœ‰ã€‚ä½ å�¯ä»¥æ‰§è¡Œå¦‚下命令创建一个å�«å�š 1.0.0 çš„æ ‡ç¾ï¼š
git tag 1.0.0 1b2e1d63ff
1b2e1d63ff æ˜¯ä½ æƒ³è¦�æ ‡è®°çš„æ��交 ID çš„å‰� 10 ä½�å—符。å�¯ä»¥ä½¿ç”¨ä¸‹åˆ—命令获å�–æ��交 ID:
git log
ä½ ä¹Ÿå�¯ä»¥ä½¿ç”¨å°‘一点的æ��交 ID å‰�å‡ ä½�,å�ªè¦�它的指å�‘具有唯一性。
替�本地改动
å�‡å¦‚ä½ æ“�作失误(当然,这最好永远ä¸�è¦�å�‘ç”Ÿï¼‰ï¼Œä½ å�¯ä»¥ä½¿ç”¨å¦‚下命令替æ�¢æŽ‰æœ¬åœ°æ”¹åŠ¨ï¼š
git checkout -- <filename>
æ¤å‘½ä»¤ä¼šä½¿ç”¨ HEAD ä¸çš„æœ€æ–°å†…容替æ�¢æŽ‰ä½ 的工作目录ä¸çš„æ–‡ä»¶ã€‚å·²æ·»åŠ åˆ°æš‚å˜åŒºçš„æ”¹åЍ以å�Šæ–°æ–‡ä»¶éƒ½ä¸�会å�—到影å“�。
å�‡å¦‚ä½ æƒ³ä¸¢å¼ƒä½ åœ¨æœ¬åœ°çš„æ‰€æœ‰æ”¹åŠ¨ä¸Žæ��交,å�¯ä»¥åˆ°æœ�务器上获å�–最新的版本历å�²ï¼Œå¹¶å°†ä½ 本地主分支指å�‘它:
git fetch origin
git reset --hard origin/master
实用�贴士
内建的图形化 git:
gitk
彩色的 git 输出:
git config color.ui true
显示历�记录时,�个�交的信��显示一行:
git config format.pretty oneline
交互å¼�æ·»åŠ æ–‡ä»¶åˆ°æš‚å˜åŒºï¼š
git add -i
链接与资�
图形化客户端
- GitX (L) (OSX, 开�软件)
- Tower (OSX)
- Source Tree (OSX, �费)
- GitHub for Mac (OSX, �费)
- GitBox (OSX, App Store)
指�和手册
相关文ç«
- Github 简明指�:http://rogerdudler.github.io/git-guide/index.zh.html
- 如何高效利用GitHub:http://www.yangzhiping.com/tech/github.html
点我分享笔记