Git是个了不得但却复杂的源代码管理体系。它能支持复杂的任务,却因此常常被以为太过复杂而不实用于简单的一样平常工作。让我们诚实一记吧:Git是复杂的,我们不要装作它不是。但我仍旧会试图教会你用(我的)根本的Git和长途代码库干活的工作步调,在15分钟内。
工作步调
我会展示以下的步调,通常能帮我独安闲一台或多台呆板上做项目。
创建一个长途的空代码库(在BitBucket上)
在本地代码库添加一个项目
在分支上开辟新功能
a)保存新功能大概b)扬弃它们
大概,回到某个早先的时间点
将本地代码库推送到长途代码库
在另一台呆板上取得长途代码库
安装Git
在大多数*nix体系(Linux、OSX)上,Git已经被安装了。你通过发送下面的下令,可以通过Git自身,把它更新到最新的的开辟版本(不保举)。
gitclonehttps://github.com/git/git
在Windows上,你可以在这里下载Git的安装程序。假如你真的必要其他体系的安装程序,MacOSX安装文件在这里,Linux的操纵引导在这里。
创建一个长途代码库
很多人喜好用Github。我个人更喜好BitBucket,由于它提供了不限定的私有代码库,那是我最必要的。你可以将下列指令转换到Github上,这些过程是雷同的。
那么,去到www.bitbucket.org并注册一个账号。一旦完成,登录后点击最上方的“create(创建)”按钮。照着填写表格,勾选私有代码库。你可不想让其他人来偷窥你的Facebook的杀手级应用的源代码,对吧。
你如今可以离开BitBucket了,我们在已经有了全部那边必要的东西了。
设置Git
在我们能用Git工作之前,我们必要做个一次性的设置。为了Git能跟踪到谁做了修改,我们必要设置你的用户名。我猛烈发起你利用与注册BitBucket账号雷同的用户名和电子邮箱地点。发送这些下令,相应地更换掉此中的“your_username”和“your_email@domain.com”(留意引号):
gitconfig--globaluser.name"your_username"
gitconfig--globaluser.emailyour_email@domain.com
我们也会设定推送(push)的默认值为‘simple’。要相识这是什么意思,快速阅读我之前发布的关于推送的默认值(非必须)。发送这条下令:
gitconfig--globalpush.defaultsimple
我们都设好了。你无需在你的呆板上再重复这些设置,但假如你在另一台呆板上工作的话,不要忘记这些设置。假如你忘记做初始的设置,Git不会答应你提交任何东西,这会让你困扰。
创建一个本地代码库
作为例子,我们会假冒我们有一个网站(无所谓技能)存在于我们呆板上的‘workspace’文件夹下的’my_site’文件夹内。在下令行中,去到你的站点的根文件夹。在OSX和Linux上:
cd~/workspace/my_site/
在Windows上:
cdc:\workspace\my_site
我们起首必要告诉Git这个文件夹是我们必要跟踪的项目。以是我们发送这个下令来初始化一个新的本地Git代码库
gitinit
Git会在my_site文件夹内创建一个名为.git的隐蔽文件夹,那就是你的本地代码库。
加载(Stage)文件
我们如今必要下令Git我们必要加载(stage)全部项目文件。发送:
gitadd.
末了的“.”符号的意思是“全部文件、文件夹和子文件夹”。假如我们只想要把特定文件添加到源代码控制中去,我们可以指定它们:
gitaddmy_file,my_other_file
提交文件
如今,我们想要提交已加载(staged)的文件。阅读“添加一个时间点,在这里你的文件处在一个可还原的状态”。我们提交我们的文件时,总是附带着故意义的解释,形貌了它们如今的状态。我不停用“initialcommit”来作为第一个提交的解释。
gitcommit-m"initialcommit"
就如许。如今你随时都可以回滚到这个提交状态。假如你有必要查抄你如今的已加载(staged)和未加载(unstaged)文件的状态、提交等,你可以扣问git的状态:
gitstatus
创建分支
创建分支是你创建代码的独立版本的动作,独立于你的主干分支。默认地,每次你提交到Git的文件都会被储存到“master(主干)”分支。
如今我们来说说,你想要向项目里添加一个功能,但你想要可以或许回滚到如今版本,以防出现不对,大概你决定要放弃这个功能。这就是你创建分支的时间了。创建并同时切换到你新建的分支,发送:
gitcheckout-bnew_feature
大概,你可以先创建一个分支然后手动切换,就像如许:
gitbranchnew_featuregitcheckoutnew_feature
要看你如今项目下全部的分支,发送这个:
gitbranch
如今你可以在你的项目上无所顾忌地做任何你想做的:任何时间,你都可以回到你创建分支前的状态。留意,你同时可以有多个分支,乃至可以从一个分支上再创建一个分支。
归并分支
当你对你的新功能满意了的时间,你想要把它加到主干分支上。当你在你的新功能分支上时,你起首必要加载(stage)而且提交你的文件:
gitadd.gitcommit-m"addsmynewfeature"
然后你移到你的主干分支:
gitcheckoutmaster
像如许归并:
gitmergenew_feature
此时,你的主干分支和你的新功能分支会变成一样的了。
扬弃分支
相反,假如你筹划扬弃你在分支里做的修改,你起首必要加载(stage)你的文件而且在分支里提交:
gitadd.gitcommit-m"featuretobediscarded"
然后,你移到主干分支:
gitcheckoutmaster
如今,你的代码处于你创建分支之前的状态了。
删除一个分支
假如你要把你的分支归并到主干分支,从主干(master)分支上发送:
gitbranch-dnew_feature
假如修改已经归并了,它只会删除分支。假如分支没有归并,你会得到一个错误信息。删除一个未归并的分支(通常你不想保存的修改),你必要发送一样的下令附带一个大写D。意思是“逼迫删除分支,无论怎样我不想要它了。”:
gitbranch-Dnew_feature
回滚到之前的提交状态
在某些时间,你大概想要回到之前的代码版本。起首,你必要找到你想回到哪个版本。要看全部的完成了的提交,发送:
gitlog
这会输出你的提交的汗青记录,像如许:
commitca82a6dff817ec66f44342007202690a93763949Author:your_usernameyour_email@domain.comDate:MonNov412:52:112013-0700changesthefrontpagelayout
commit085bb3bcb608e1e8451d4b2432f8ecbe6306e7e7Author:your_usernameyour_email@domain.comDate:MonNov411:40:332013-0700addsmynewfeature
commita11bef06a3f659402fe7563abf99ad00de2209e6Author:your_usernameyour_email@domain.comDate:MonNov410:37:282013-0700initialcommit
假如你想回到“addsmynewfeature”这个提交,简单地用提交的ID做签出(checkout)(我通常只用到ID开头的9个字符)
gitcheckout085bb3bcb
你也可以签出到一个新的分支,像如许:
gitcheckout-bmy_previous_version085bb3bcb
只是别太疯狂了!你的分支越复杂,就越难确定你真正在做什么。
推送到长途代码库
在第一次你想推送一个本地代码库到长途代码库时,你必要把它添加到你的项目设置里。像如许做:
gitremoteaddoriginhttps://your_username@bitbucket.org/your_username/name_of_remote_repository.git
留意这里的“origin”只是一个风俗。它是你的长途代码库的别名,但是你可以用其他任何你喜好的词。你乃至可以有多个长途代码库,你只必要给它们起差别的别名。
之后,你想要推送你的本地代码库的主干分支到你的长途代码库:
gitpushoriginmaster
假如你利用Bitbucket,在这时,你会被哀求输入你的暗码。照做,你的本地代码库会被推送到你的长途代码库上。
取得长途代码库的一份本地拷贝
假如你还没有一份长途代码库的本地版本(比方,假如你在另一台呆板上开始工作,这台呆板上还没有效过这个项目),你起首必要拷贝(clone)它。去到你的代码库想要拷贝到的文件夹下,并发送:
gitclonehttps://your_username@bitbucket.org/your_username/name_of_remote_repository.git
另一方面,假如你已经在本地的项目上工作了,只是想从长途代码库上取得它最新的版本,移动到项目标根目次下,并发送:
gitpulloriginmaster
别名
Git答应你为你常用的下令创建快捷方式(别名)。比方,假如你不想每次都输入gitcommit-m“somecomment”,而是输入gitc“somecomment”,你可以向你的git全局设置里添加一个别名来实现,像如许:
gitconfig--globalalias.c'commit-m'
这是我利用的别名列表:
gitconfig--globalalias.c'commit-m'
gitconfig--globalalias.co'checkout'
gitconfig--globalalias.cob'checkout-b'
gitconfig--globalalias.br'branch'
gitconfig--globalalias.m'merge'
gitconfig--globalalias.a'add.'
gitconfig--globalalias.s'status'
gitconfig--globalalias.dbr'branch-d'
我要评论