git使用小结
git使用小结
git 使用小结
很多人可能和我一样,起初对 git 是一无所知的。我也是因为一次偶然的机会接触到 git ,并被它强大的功能所蛰伏。 git 其实就是一种版本控制工具,就像 svn 一样,但是 git 是分布式的。我不想给 git 打广告,我们直入正题—— git 能帮我们做什么?
1 )源码版本控制。平常写一写 demo 程序可能和 git 打不上交道,但是当我们把程序写到 10000 行以上,一般一个人开发的话要持续一个多月。期间程序作者可能会保存了 N 多份程序不同时期的拷贝,一来是为了备份代码,二者是作者添加新的程序功能,一旦对新功能不满意时可以方便撤销。 git 能帮助我们保存每次提交源码更改时的历史记录,并在需要的时候帮助我们撤销回滚。
2 )协同软件开发。如果说一个人把程序“写大”后需要 git 帮助控制版本,那么当有 N 个人同时开发一个软件的时候, git 的功能就更加必要了。多人协同开发有很多工作模式,一般会在服务器端保存最新的源码版本。 git 帮助开发人员们同步修改,合并更新等。这里就涉及到了 github , www.github.com 就是保存开源项目的公共服务器,任何开发者都可以从该网站上下载自己项目的最新版本,修改后提交。因此 github 的命名也很形象,每个开发者就像客户端连接到公共的 git 服务器 hub (集线器)上。
一言以蔽之,如果平常个人开发软件的话, git 可以帮助我们方便的维护程序的版本;如果是多人共同开发的话, git 能帮助我们协同工作。弄清这些,我们就开始 Ubuntu 上的 git 的使用。如果你从未用过 git ,这些入门级的介绍或许对你来说很有帮助,如果你是 git 专家,也希望你不吝指出文中的错误,共同进步!
1 . git 的安装和配置
首先从源上直接下载安装 git 。
$sudo apt-get install git-core -y
安装完毕后,需要配置 git ,告诉它“你是谁?”——包括你的姓名和 Email ,这些信息会在以后你的每次提交中出现。
$git config --global user.name “Your Name”
$git config --global user.email “your_email@email.com”
这些配置信息会保存在用户目录下。
$cat ~/.gitconfig
[user]
name = Your Name
email = your_email@email.com
到这里,就可以正常地在本地使用 git 了,但是我们还不能从 github 上下载和上传数据。因为 github 的仓库( Respository )一般都是开源的,所有人都可以自由的下载,但这不意味着所有人都能上传。如果要获得对 github 仓库的更新的权限,必须首先注册自己的公钥。
Ubuntu 的用户 RSA 公钥和密钥默认放在用户目录下,如果没有的话使用命令创建。
$cd ~/.ssh || ssh-keygen -t rsa -C your_email@example.com
密码是可选的,最终会在 ~/.ssh 下创建密钥文件 id_rsa 和公钥文件 id_rsa.pub 。
登录 github 后打开链接 https://github.com/settings/ssh 设置公钥。点击“ Add SSH key ”添加公钥。
首先拷贝刚生成的公钥的二进制数据,使用 xclip 命令。如果系统未安装 xclip ,首先安装该软件。
$sudo apt-get install xclip -y
$xclip < ~/.ssh/id_rsa.pub
给公钥命名,粘贴公钥内容,添加成功。
最后确认公钥是否正常。
$ssh -T git@github.com
当看到“ Hi YourGithubID! You've successfully authenticated… ”的信息时,大功告成!
2 .仓库的创建和初始化
即使是个人独立开发软件使用 git 维护程序版本,使用 github 也会带来很大的便捷。只要有网络,从 github 上下载最新的源码,随时随地都可以修改更新。要达到这个目的,需要在 github 上创建一个 Respository (网址: https://github.com/new ),输入仓库名字(如 work )创建即可。此时新创建的仓库是个空的仓库,等待我们本地上传新的数据。
首先我们需要创建一个工作目录,在这个目录我们开发源代码 , 然后新建一个自读文件 README.md 。
$cd
$mkdir work
$cd work
$touch README.md
接着初始化该 git 仓库。
$git init
该命令在工作目录下生成了一个隐藏的文件 .git ,用于管理工作目录下所有文件的改变。
因为新建了文件 README.md ,如果要 git 对它的版本维护,则需要将它添加到 git 的索引中( git add . 命令可以添加所有的工作目录下的文件)。
$git add README.md
因为对 git 的仓库做了改动,便可以产生一次提交。
$git commit –am “first commit”
commit 仅仅是把更改保存在了本地的 git ,下面就需要将我们所做的改动更新到服务器上,首先设置服务器 git 的地址。
$git remote add origin git@github:YourGithubID/work.git
origin 是服务器 git 的别名,如果要上传我们的数据更新,则使用 push 命令。
$git push origin master
该命令将本地的 git 主分支 master 提交到远程服务器 origin 主分支 master 上。成功后打开地址 https://github.com/YourGithubID/work 可以看到新建的 README.md 文件已经存在了。
3 .提交的更新和撤销
git 的版本控制功能带给我们最大的好处是随时记录我们对源码的更改,并在我们需要的时候撤销已经做过的操作,不过这些便利是建立在每一次提交( commit )上的。每次使用 commit 命令后, git 都会在 log 中增加一条历史记录。
使用 status 和 log 命令可以查看当前工作目录的状态和提交日志。
$git status
$git log
例如上一节提交的 first commit 记录。
Author: Your Name <your_email@email.com>
first commit
除了新加文件需要使用 git add 命令再提交之外,其他情况的更新直接使用 commit –am 提交即可,所有的改变都会反映在本地的日志中。
我们也可以建立标签标记某次重要的提交。
$git tag INIT
如果我们在开发的过程突然发现某次之后的代码修改需要全部撤销,这时就是 git 大显身手的时候了。 git reset 命令可以让我们回到任何一个已经提交的历史状态!
$git reset --soft 903fd
该命令将工作的状态撤销到 first commit 之后( 903fd 为该 commit 的 hash id 的开始数个位),而且该命令不会直接修改工作目录下的源文件。我们也可以使用标签。
$git reset --soft INIT
如果此时使用 commit 提交更新的话,则可以把从 first commit 之后的全部修改合并为一次提交,这样有减少 log 记录的好处。
如果你确信要彻底撤销工作目录下的文件的更改,可以这样做。
$git reset --hard 903fd
这样就彻底回到了最开始的状态,除非你完全觉得有必要,否则尽量不要这样做。
如果使用 git 仅仅是为了达到偶尔的撤销的目的,这些功能貌似就够用了,但是 git 提供的便利性不仅如此。
4 .版本的分支和合并
相比于其他版本控制工具, git 更提倡使用分支!所谓分支是相对于服务端的主干版本而言的,从 git 项目建立时就默认处于主分支 master 上。如果在开发过程中开发人员有多个思维选择实现,或者有多个分工同步进行,那么建立多个分支分别同时开发。到分支结束后再决定是选择放弃哪些分支,或者将分支合并到主分支上等。
总的来说, git 的分支模型为开发者提供一种额外的解决问题的思路,而不需要担心源代码的修改带来的副作用。分支上的开发者完全“生存”在另一个时空维度里,就像物理学中的平行空间一样,他们完全自由的在分支上更改源代码,甚至最后结果不满意时放弃这个分支的所有工作!分支模型帮助多人开发进行工作的协同,在每个人看来,开发模式一般是按照“下载最新版本——修改更新——合并提交”这样的流程进行。这种模式对于独立的开发者也很方便,开发者随时都可以下载最新的源码版本,随地的修改自己的代码,然后提交更新。我们按照这个流程看一下 git 的分支模型的使用。
首先是下载最新的源码版本。
$git clone https://github.com/YourGithubID/work.git
如果之前已经下载过该项目,则使用。
$git pull origin
直接从 origin 下载最新版本源码,并和本地主分支 master 合并。相当于命令组合。
$git fetch origin
$git merge origin/master
如果我们修改的源码并非自己 github 上的仓库,则需要将别人的仓库 fork 一份到自己的 github 上在按照上述方式下载,更新。最后 push request 到原作者的 github 上,如果原作者接受你的 push request ,则完成对他人代码的修改。
将最新版本的仓库下载到本地后,就可以修改源码了。一般我们不会直接对 master 分支更新,而是先建立一个临时的工作分支——如 br1 。
使用 checkout 切换到分支 br1 上,此后所有的操作都是在 br1 上进行,不会对 master 有任何影响。最终我们完成了 br1 上的工作,然后我们需要将 br1 合并到 master 主分支上。
$git checkout master
合并后的主分支记录了我们在 br1 上做的所有修改,最后我们需要将新的 master 主分支 push 到服务器上,完成当前阶段的工作!
5 .总结
以上我们涉猎了 git 的基本使用方法,很多高级的用法无法在这里一一展示,本文也是期望带领初学者快速了解 git 的使用,并为自己的代码开发和版本控制提供便利。如果你在为开发软件不厌其烦的备份和多人源码的分工合作头疼不已时,不妨试一下 git ,或许有种“拨开云雾见月明”的感觉!
作者: Florian
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。[若本文对你有所帮助,还望多多推荐支持~!]
分类: Linux
标签: git
作者: Leo_wl
出处: http://www.cnblogs.com/Leo_wl/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
版权信息