别再用 U 盘传代码了:Git 版本控制入门

如果你还在用”项目最终版.zip””项目最终版真的最终版.zip””给老王改的版本.zip”这种方式管理代码,那这篇文章就是写给你的。随着团队协作和个人项目越来越复杂,靠文件夹和 U 盘来追踪代码改动,迟早会把自己坑进去。版本控制工具就是为解决这件事而生的,而在 2012 年的今天,Git 已经从 Linux 内核圈的小众玩具,变成了几乎所有开发者都绕不开的基本功。这篇教程不追求面面俱到,只帮你迈出从 0 到 1 的第一步。

2012 年 Git 版本控制命令行终端配图

为什么需要版本控制

先想清楚一个问题:版本控制到底解决了什么痛点?第一,它帮你记录每一次改动,谁、在什么时间、改了哪几行、为什么改,全都有据可查。第二,它允许你并行开发不同的功能——你在一个分支上做登录,同事在另一个分支上做支付,互不干扰,最后再合并。第三,它是一个安全网:改崩了可以一键回退到上一个能跑的版本,而不是对着一堆报错欲哭无泪。

在 Git 流行之前,很多人用的是 Subversion(SVN)这类集中式版本控制,代码仓库集中在一台服务器上,断网就没法提交。Git 最大的不同是它是分布式的:每个人本地都有一份完整的仓库历史,断网照样可以提交、查看历史、创建分支,只在需要同步时才和远端通信。再加上它速度快、对分支操作极其轻量,这几年迅速成为开源社区的主流。GitHub 的崛起更是把 Git 推到了台前——在上面你能找到几乎所有知名开源项目,也能把自己的代码公开托管,和全世界的开发者协作。

装好你的第一个 Git

Linux 和 Mac 用户安装起来很方便,Mac 上自带或者通过包管理器安装即可,主流 Linux 发行版的软件源里都有 git 这个包。Windows 用户稍微麻烦一点:目前最常用的方式是下载 msysgit,它会给你提供一个叫 Git Bash 的命令行环境,安装完成后在开始菜单里找到 Git Bash 打开,就能用和 Linux 上几乎一样的命令了。如果你更喜欢图形界面,TortoiseGit 集成在资源管理器右键菜单里,对从 SVN 时代过来的人比较友好。

装好之后,第一件事是告诉 Git 你是谁。打开命令行,执行下面两条命令,把名字和邮箱换成你自己的:

git config –global user.name “你的名字”
git config –global user.email “you@example.com”

这一步很重要,因为之后你每一次提交都会带上这个身份信息。

创建仓库并完成第一次提交

找一个空文件夹,进入其中,执行 git init,Git 就会在这里初始化一个新仓库,悄悄建一个 .git 目录来存放所有版本历史。接下来你随便写一个文件,比如 index.html。这时候它还只是一个普通文件,Git 并不会自动追踪它。你需要先用 git add index.html 把它放进”暂存区”,再执行 git commit -m “我的第一次提交” 正式提交到仓库。

这个”先 add 再 commit”的两步设计是 Git 的特色:你可以把相关的改动分批加入暂存区,组成一个语义清晰的提交,而不是把一次会话里乱七八糟的改动全塞进一个 commit。提交完成后,用 git log 就能看到刚才那条记录,用 git status 可以随时查看当前有哪些文件改动了、哪些在暂存区。

分支:Git 最强大的部分

很多人学 Git 卡在分支上,其实理解了思想就很简单。默认分支叫 master,你在上面提交,它就往前走。想开发新功能时,不要直接在 master 上动刀,而是用 git checkout -b feature-login 新建并切换到一个叫 feature-login 的分支。在这个分支上随便改、随便提交,master 分支完全不受影响。等功能做好、测试通过,再切回 master,用 git merge feature-login 把它合并回来。

分支在 Git 里极其廉价——它本质上只是一个指向某次提交的可移动指针,创建和切换都是瞬间完成的。这和过去在 SVN 时代建一个分支要折腾半天、合并更是噩梦的体验天差地别。鼓励大家养成”一个功能开一个分支”的习惯,主分支永远保持能正常运行的状态,这是团队协作里非常重要的一条纪律。

几个新手常踩的坑

第一次用 Git,有几个地方几乎每个人都会栽跟头。一是忘记建 .gitignore 文件:编译产物、临时文件、带密码的配置,这些不该进仓库的东西如果随手 add 进去,仓库会越来越臃肿,密码还可能被公开推到 GitHub 上,非常危险。开始一个项目时,第一件事就该写好 .gitignore,告诉 Git 哪些文件不要追踪。二是提交信息写得太随意,”update””改了点东西”这种注释过几周连自己都看不懂,好的提交信息应该说清楚这次改动是为了什么。三是在 master 分支上直接开发,出了问题想回退都麻烦。养成勤开分支、勤提交的习惯,Git 才会真正成为你的安全网,而不是又一个让人头疼的工具。

把代码推到 GitHub

本地仓库玩熟了,就可以把它放到 GitHub 上。在 GitHub 网站上注册一个账号,新建一个空仓库,它会给你一个地址。回到本地,执行 git remote add origin 那个地址,把本地仓库和远端关联起来,再用 git push -u origin master 把主分支推上去。之后每次有新的提交,只要 git push 一下,代码就备份到了云端,也方便和别人分享、协作。

结语

这篇文章只覆盖了 Git 最最基础的一部分——init、add、commit、branch、merge、push,真正要用熟,还会碰到解决合并冲突、rebase、标签、子模块等一堆概念。但版本控制这个工具的价值,只有当你真正用它管过几个项目、体会过”改崩了一键回退”的安心之后,才会刻骨铭心。别等项目乱成一锅粥才想起它,从下一个新项目开始,就 git init 吧。

赵久龙 站长

852 文章
0 粉丝
0 评论

0 条评论

还没有评论,快来抢沙发吧!

发表评论

客服