Git 版本控制:从 FreeBSD 安装到日常操作详解
Git 是开发者极为熟悉的分布式版本控制工具,由 Linux 创始人林纳斯·托瓦兹(Linus Torvalds)亲手打造,初衷是为高效管理 Linux 内核这类超大规模项目。与 CVS、Subversion 等传统集中式版本控制系统不同,Git 采用去中心化架构,无需持续依赖服务端软件,代码发布与协作因此变得异常灵活。速度是它的核心优势——对于像 Linux 内核这样的巨型项目而言尤为关键。而 Git 最突出的能力,当属合并跟踪(merge tracing),让分支管理更加清晰可控。
1. 在 FreeBSD 8.1 下搭建 Git 服务器
(1)通过 ports 安装 Git
cd /usr/ports/devel/git make install clean
(2)配置开机自启——编辑 /etc/rc.conf,添加以下内容:
git_daemon_enable="YES"
(3)创建专用 git 用户(用于运行 Git 守护进程):
pw useradd git
(4)启动 Git 守护进程:
/usr/local/etc/rc.d/git_daemon start
(5)通过 sockstat 验证启动状态:
sockstt -4l | grep 9418 root git-daemon 37064 3 tcp4 192.168.21.248:9418 *:*
若看到 9418 端口处于监听状态,说明 Git 守护进程已成功运行。
2. 如何将新项目导入 Git
(1)在 Git 系统中完成身份配置——姓名和邮箱地址是必需信息:
git config --global user.name "Andrew.yu" git config --global user.email "yuhongchun027@163.com"
(2)将本地目录 /home/andrewyu/test 初始化为 Git 项目仓库:
cd /home/andrewy/test/ git init git add . git commit
(3)此时查看目录结构,会发现新增了一个 .git 隐藏文件夹,它承载着项目的全部版本历史:
[root@research_jail ~/project]# ls -lsart total 8 2 -rw-r--r-- 1 root wheel 18 Apr 7 07:42 30 2 -rw-r--r-- 1 root wheel 0 Apr 7 07:42 20 2 -rw-r--r-- 1 root wheel 0 Apr 7 07:42 12 2 drwxr-xr-x 8 root wheel 512 Apr 7 07:42 .git 2 drwxr-xr-x 3 root wheel 512 Apr 7 07:43 . 2 drwxr-xr-x 4 root wheel 512 Apr 7 07:43 ..
git init 命令正是在此创建了隐藏目录,之后每一次提交都会在其中留下记录。
3. Git 命令行操作速查
查看当前工作区与暂存区之间的差异:
git diff
查看暂存区与最近一次提交之间的差异:
git diff --cached
查看整体变更状态(哪些文件被修改、哪些已被暂存):
git status
告知 Git "我修改了 hello.py,请纳入跟踪"——无论是新增还是修改,都通过 git add 进行登记:
git add hello.py
正式将暂存区的内容提交到仓库:
git commit
查看提交历史记录:
git log
版本回退操作——提供三种不同力度的回退方式:
- 仅回退
commit信息,暂存区和工作区代码保持不变:
git reset --soft HEAD
- 回退
commit和暂存区,同时将工作区代码恢复至修改前的状态:
git reset --hard HEAD
- 回退
commit和暂存区,但工作区代码保留(即仅撤销暂存和提交,改动内容仍在):
git reset --mixed HEAD
- 默认情况下
git reset HEAD等价于--mixed:
git reset HEAD
- 从暂存区中移除某个已登记的文件(不删除工作区文件):
git reset -- a.py
分支管理——日常开发中不可或缺的功能:
- 创建名为
branch-a的分支:
git branch branch-a
- 切换到
branch-a分支:
git checkout branch-a
- 将
branch-a合并到当前分支(若出现冲突,会提示具体位置,需手动修改后再合并):
git merge branch-a
- 合并完成后删除
branch-a分支(前提是已合并):
git branch -d branch-a
- 强制删除分支(无论是否合并):
git branch -D branch-a
远程仓库操作示例——克隆与拉取:
- 克隆本地仓库
/home/flynewton/hello-git到hello-git2:
git clone /home/flynewton/hello-git hello-git2 cd hello-git2
- 在
hello-git2中修改代码并提交,然后创建分支branch-b并完成修改和提交。 - 回到原仓库
hello-git目录后,将hello-git2的主干代码作为本地的新分支hello2-works:
git fetch /home/flynewton/hello-git2 master:hello2-works
- 查看本地主干与
hello2-works分支之间的差异:
git -p master..hello2-works
- 将
hello-git2的主干合并到本地:
git pull /home/flynewton/hello-git2 master
- 将
hello-git2的分支branch-b合并到本地主干:
git pull /home/flynewton/hello-git2 branch-b
在实际的企业开发环境中,目前仍以 SVN 作为主力版本管理工具,Git 尚处于评估测试阶段。从试用体验来看,Git 在处理项目子目录的版本控制时不够灵活——它无法像 SVN 那样方便地选择特定目录进行跟踪;此外,分支合并过程中产生的 Merge 冲突处理也较为繁琐。相比之下,SVN 在这些场景下更为顺手。因此,现阶段建议以 SVN 为主、Git 为辅进行代码管理,待 Git 生态成熟且团队适配完善后,再逐步完成迁移。
