设为首页 收藏本站
查看: 956|回复: 0

[经验分享] Florian ——非淡泊無以明志,非寧靜無以致遠。

[复制链接]

尚未签到

发表于 2018-1-14 18:35:24 | 显示全部楼层 |阅读模式
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
  当看到&#8220;Hi YourGithubID! You've successfully authenticated&#8230;&#8221;的信息时,大功告成!
  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 &#8211;am &#8220;first commit&#8221;
  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记录。
  commit 903fd****************************f322e05
  Author: Your Name <your_email@email.com>
  Date:   Mon Apr 22 12:02:44 2013 +0800
  
  first commit
  除了新加文件需要使用git add命令再提交之外,其他情况的更新直接使用commit &#8211;am提交即可,所有的改变都会反映在本地的日志中。
  我们也可以建立标签标记某次重要的提交。
  $git tag INIT
  如果我们在开发的过程突然发现某次之后的代码修改需要全部撤销,这时就是git大显身手的时候了。git reset命令可以让我们回到任何一个已经提交的历史状态!
  $git reset --soft 903fd

  该命令将工作的状态撤销到first commit之后(903fd为该commit的hash>  $git reset --soft INIT
  如果此时使用commit提交更新的话,则可以把从first commit之后的全部修改合并为一次提交,这样有减少log记录的好处。
  如果你确信要彻底撤销工作目录下的文件的更改,可以这样做。
  $git reset --hard 903fd
  这样就彻底回到了最开始的状态,除非你完全觉得有必要,否则尽量不要这样做。
  如果使用git仅仅是为了达到偶尔的撤销的目的,这些功能貌似就够用了,但是git提供的便利性不仅如此。
  4.版本的分支和合并
  相比于其他版本控制工具,git更提倡使用分支!所谓分支是相对于服务端的主干版本而言的,从git项目建立时就默认处于主分支master上。如果在开发过程中开发人员有多个思维选择实现,或者有多个分工同步进行,那么建立多个分支分别同时开发。到分支结束后再决定是选择放弃哪些分支,或者将分支合并到主分支上等。
  总的来说,git的分支模型为开发者提供一种额外的解决问题的思路,而不需要担心源代码的修改带来的副作用。分支上的开发者完全&#8220;生存&#8221;在另一个时空维度里,就像物理学中的平行空间一样,他们完全自由的在分支上更改源代码,甚至最后结果不满意时放弃这个分支的所有工作!分支模型帮助多人开发进行工作的协同,在每个人看来,开发模式一般是按照&#8220;下载最新版本&#8212;&#8212;修改更新&#8212;&#8212;合并提交&#8221;这样的流程进行。这种模式对于独立的开发者也很方便,开发者随时都可以下载最新的源码版本,随地的修改自己的代码,然后提交更新。我们按照这个流程看一下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分支更新,而是先建立一个临时的工作分支&#8212;&#8212;如br1。
  $git branch br1
  $git checkout br1
  使用checkout切换到分支br1上,此后所有的操作都是在br1上进行,不会对master有任何影响。最终我们完成了br1上的工作,然后我们需要将br1合并到master主分支上。
  $git checkout master
  $git merge br1
  合并后的主分支记录了我们在br1上做的所有修改,最后我们需要将新的master主分支push到服务器上,完成当前阶段的工作!
  5.总结
  以上我们涉猎了git的基本使用方法,很多高级的用法无法在这里一一展示,本文也是期望带领初学者快速了解git的使用,并为自己的代码开发和版本控制提供便利。如果你在为开发软件不厌其烦的备份和多人源码的分工合作头疼不已时,不妨试一下git,或许有种&#8220;拨开云雾见月明&#8221;的感觉!

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-435084-1-1.html 上篇帖子: Git学习:利用Git和TortoiseGit把代码传输到网络服务器 下篇帖子: 玩转git分支
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表