首页 关于 微信公众号
欢迎关注我的微信公众号

简用git

引言

git 命令有很多,可以看看这篇文章:git命令详解。在实际使用中我们用到的命令可能并不会覆盖到所有,所以我们不一定要对每条命令都熟悉,但是根据实际的情况,按照一定的规范去使用 git 对于团队开发是非常重要的。这里主要就聊一聊我自己平时使用 git 所遵循的一些规范,这些主要是根据我自己的情况总结的,不一定适用于所有人,大家可以多一起讨论,总结出更多场景下的使用规范。

远程分支状态

通常我们的项目建立起来,会随着需求更新迭代出多个的版本。那么我们项目在远程库上的状态一般可能是这种情况:

即项目有 master v1.0 v1.1 三个分支,其中 master 是我们的主分支,它始终和最新版本的代码保持一致,比如在上面的情况,masterv1.1 的最新代码始终保持一致,并且通常我们只由一个或少数几个人管理 master 分支,防止乱套了。v1.0 v1.1 分支是项目的不同版本,v1.0 是旧版本了,通常会已经停止这个版本的开发,如果实在是还要继续在这个分支上的开发,那么其代码将只在该分支上提交,不会往 master 上合并。v1.1 是项目的最新版本,在这个分支上提交的代码,也将往 master 上合并。

使用git

获取代码到本地

通常有下面几步:

git clone git://example.com/myproject // 获取 master 分支到本地
git branch -a // 查看所有分支
git fetch origin v1.1:v1.1 // 获取远程v1.1分支到本地作为v1.1分支
git checkout v1.1 // 切换到v1.1分支工作
git branch v1.1-mine // 在当前分支(v1.1)基础上创建一个新的分支v1.1-mine
git checkout v1.1-mine // 切换到v1.1-mine分支工作

上面的命令有的可以简化,这里就不多讲了。这时候我们就建好自己本地的工作相关分支了。其中包括:

其中,master v1.1 分别映射远程分支 remotes/origin/master remotes/origin/v1.1,而 v1.1-mine 是我自己习惯创建的一个自己的本地工作分支,一方面可以在开发的过程中可以跟 v1.1 对照,另一方面也可以作为 v1.1 的一个备份,万一弄坏了,直接删掉就好了。

提交代码到远程

通常我都在 v1.1-mine 分支上做开发,做完对应的工作后,就开始代码的提交工作:

// 当前我们的工作分支是 v1.1-mine
git commit -am 'commit message' // 提交代码到本地
git checkout v1.1 // 切换到v1.1分支

git pull origin v1.1:v1.1 // 同步远程v1.1分支和本地v1.1分支
// 上面的这条命令更安全的做法是这样
git fetch origin v1.1:v1.1-tmp // 获取远程v1.1分支代码到本地作为v1.1-tmp分支
git diff v1.1-tmp // 比较v1.1-tmp分支和当前工作分支(v1.1)
git merge v1.1-tmp // 合并v1.1-tmp分支到当前工作分支(v1.1)
// 如果出现冲突,处理冲突...

// 合并、提交自己的代码
git merge v1.1-mine // 合并v1.1-mine分支到当前工作分支(v1.1)
// 如果出现冲突,处理冲突...
git push origin v1.1:v1.1 // 同步本地v1.1分支到远程v1.1分支

// 如果你要管理master分支,你可能还需要这样
git checkout master // 切换到master分支
git pull origin master:master // 同步远程master分支到本地master分支
// 如果出现冲突,处理冲突...
git merge v1.1-mine // 合并v1.1-tmp分支到当前工作分支(master)
// 如果出现冲突,处理冲突...
git push origin master:master // 同步本地master分支到远程master分支

需要注意的是,git pull命令和git push命令的格式是这样解读的:

上面的过程根据需要可能不同,当遇到冲突的时候更是需要看情况做出适应的处理,总的原则应该是:

使用.gitignore

常规的忽略

使用 git,通常有些内容是需要我们忽略而不应该提交到远程代码服务器的,通常我们需要在项目的根目录下,创建一个 .gitignore 文件,然后在里面按照一定的规则定义我们想要忽略的内容。拿 Xcode 项目来说,我们参考 https://github.com/github/gitignore/blob/master/Objective-C.gitignore 内容如下:

# OS X
.DS_Store

# Xcode
build/
*.pbxuser
!default.pbxuser
*.mode1v3
!default.mode1v3
*.mode2v3
!default.mode2v3
*.perspectivev3
!default.perspectivev3
xcuserdata
*.xccheckout
profile
*.moved-aside
DerivedData
*.hmap
*.ipa

# CocoaPods
Pods

需要注意的是,我们添加了 .gitignore 文件后,不要忘记把它添加到 git 的管理中:

git add .gitignore // 添加
git commit -am “add gitignore” // 提交
git push origin remote-branch:local-branch // 同步到远程库

自定义ignore文件夹

除了上面常规的需要忽略的内容外,通常我们还希望我们有一个 ignore 文件夹,我们可以方便的把一些东西拖进去使用,但是又不会提交服务器,比如一些素材、第三方库等等。这里的需求是:我们需要 git 来忽略某个文件夹下的所有内容,但是却依然管理这个文件夹。而实际上 git 是不会 track 文件夹的。那我们应该这样做:

# Ignore everything in this directory
*
# Except this file
!.gitignore
# And you also can add one read me file to log something
!readme 
git add project/ignore-folder/.gitignore // 添加
git commit -am “add ignore-folder” // 提交
git push origin remote-branch:local-branch // 同步到远程库

这样就可以方便的使用 ignore-folder 了,不过那些被放进去的文件,如果是项目需要的,那就需要你自己通过其他方式传给你的小伙伴了,一般来说,小伙伴直接原样copy到 ignore-folder 对应的位置就可以了。

=== 文章完 ===

Blog

Opinion

Project