什么是 Git?
----Git 是目前世界上最先进的分布式版本控制系统
Git 的诞生
作者是 Linux 之父:Linus Benedict Torvalds
当初开发 Git 仅仅是为了辅助 Linux 内核的开发(管理源代码)
git 开发时间表
git 的产生是 Linux Torvals 在无奈被逼的情况下创造的,我看了一下时间历程:
2005 年 4 月3 日开始开发 git
2005 年 4 月 6 日项目发布
2005 年 4 月 7 日 Git 开始作为自身的版本控制工具
2005 年 4 月 18 日发生第一个多分支合并
2005 年 4 月 29 日 Git 的性能达到 Linux 预期
2005年 7 月 26 日 Linux 功成身退,将 Git 维护权交给 Git 另一个主要贡献者 Junio C Hamano,直到现在
牛是怎么定义的呢?大家可以体会一下
Git 迅速成为最流行的分布式版本控制系统,尤其是 2008 年,GitHub 网站上线了,它为开源项目免费提供 Git 存储,无数开源项目开始迁移至 GitHub,包括 jQuery,PHP,Ruby 等等
版本仓库
概念
版本库,又名版本仓库,英文名repository
这个目录里面的所有文件都可以被 Git 管理起来,每个文件的修改、删除,Git都能跟踪,以便任何时刻都可以追踪历史,或者在将来某个时刻可以“还原”
版本库的注意事项
没事千万不要手动修改这个目录里面的文件,不然改乱了,就把 Git 仓库给破坏了
不要已经有版本库管理的目录中,再建立版本库,否则 git 就不知道如何管理了
创建版本库
建立需要用 git 管理的目录
进入终端
$cd项目目录
$ git init
通过git init命令把这个目录变成 Git 可以管理的目录
注意:不要再在这个目录的子目录中建立.git的目录
GIT 的常用终端命令
步骤
新建目录
新建001-第一个git目录
打开终端,输入以下命令
$cd[空格] [在 Finder 选中目录拖拽到此处,然后回车]
现在在终端中操作的目录就是刚刚创建的目录了
建立版本仓库(git init)
在终端输入以下命令
$ git init
可以在终端中看到建立了一个.git的目录
这个目录就是 git 的版本库目录
001-第一个git和该目录的所有子目录中的文件都归这个版本库管理
将该目录拖拽到 sourceTree 中观察文件变化
新建文件(git status查看状态)
在终端输入以下命令,创建一个文件
$ touch hello.m
在 SourceTree 中观察文件变化
在终端中输入以下命令
$ git status
提示以下内容
On branch master
>在 master 分支上Initial commitUntracked files:
> 没有跟踪的文件
(use"git add ..."to includeinwhat will be committed)
hello.m
nothing added to commit but untracked files present (use"git add"to track)
使用 `git add` 跟踪文件
添加到暂存区(git add .)
输入以下命令,将 hello.m 添加到暂存区
$ git add .
将当前目录下所有修改过的文件(新增的/修改的)添加到暂存区
git add并没有直接将修改放到版本库,给程序员一个后悔的机会
在终端中输入以下命令
$ git status
提示以下内容
On branch master
Initial commit
Changes to be committed:
(use"git rm --cached ..."to unstage)
new file: hello.m
注意观察 srouceTree 中的变化
提交到版本库(git commit .)
输入以下命令,将 所有修改 提交到版本库,并且说明修改原因
$ git commit -m "添加了 hello.m"
在终端中输入以下命令
$ git status
提示以下内容
On branch master
nothing to commit, working directory clean
一旦提交后,如果没有再对工作区做任何修改,那么工作区就是“干净”的
修改文件
输入以下命令,用 Xcode 打开 hello.m
$ open hello.m
在 Xcode 中输入以下内容
#include <stdio.h>
int main() {
printf("hello git\n");
}
在终端中输入以下命令
$ git status
提示以下内容
On branch master
Changes not staged for commit:
(use"git add ..."to update what will be committed)
(use"git checkout -- ..."to discard changes in working directory)
modified: hello.m
no changes added to commit (use"git add"and/or"git commit -a")
在终端中输入以下命令,将修改添加到暂存区
$ git add .
在终端中输入以下命令
$ git status
提示以下内容
$ git status
On branch master
Changes to be committed:
(use"git reset HEAD ..."to unstage)
modified: hello.m
在终端中输入以下命令,将修改提交到版本库
$ git commit -m"修改了hello.m"
在终端中输入以下命令
$ git status
提示以下内容
On branch master
nothing to commit, working directory clean
gitignore
操作步骤
在终端输入以下命令,编译hello.m
$ gcc hello.m
在终端编译生成一个a.out的可执行文件,这个文件是不需要提交到版本库的
在终端输入以下命令,创建.gitignore
用 Xcode 打开.gitignore输入
*.out
表示忽略追踪所有以.out结尾的文件
在终端输入以下命令
$ git add .$ git commit -m "添加 .gitignore 文件"
在日常开发中,以下文件都不需要提交到服务器上保存:
根个人相关的文件,例如:最后打开的文件、断点
第三方框架
提示:
Xcode 默认继承了极少的几个常用 Git 命令,但是不包含对.gitignore文件的生成和管理
是否知道 .gitignore 文件,直接可以判定这个程序员是否有团队开发经验
独立的代码仓库
操作步骤
建立仓库
新建一个目录CZHelloProject.git
进入终端,进入该目录
输入以下命令
$ git init --bare
--bare参数可以建立仅用于交换的独立的代码仓库
建立多人目录
新建张三/经理两个目录,分别演示两个独立的程序员角色
准备经理的目录
在终端中输入以下命令
$cd[经理的目录]$ gitclone[代码仓库目录]$cdCZHelloProject
设置个人信息
# 设置用户名
$ git config user.name经理
# 设置邮箱
$ git config user.emailmanager@qq.com
# 查看设置信息
$ git config -l
按照以上步骤重复张三的目录设置
多人协作
操作步骤
经理创建项目
从gitignore-master复制Objective-C.gitignore到项目目录
在终端中输入以下命令重命名
$ mv Objective-C.gitignore .gitignore
$ git add .
$ git commit -m"添加 gitignore"
$ git status
设置追踪流,只有在本地的版本库才需要设置
$ git branch --unset-upstream
新建HelloGit项目,保存在刚刚创建的目录中
将项目目录拖拽到 SrouceTree 中,并且改名
注意:一定要先添加.gitignore再添加项目文件,否则有些文件默认不会被忽略
张三开始工作
询问经理版本库地址
在终端克隆版本库
$ gitclone[版本库地址]
设置个人信息(仅在一台计算机模拟多人需要)
$ git config user.name 张三
$ git config user.email 张三@qq.com
$ git config-l
冲突以及冲突解决
所谓冲突就是当两个人同时修改了同一个文件的同一行代码,才会产生冲突!
通过fetch可以提前看到是否存在冲突,比直接用 pull 要方便很多
storyboard的冲突很麻烦,所以很多企业不愿意用storyboard
即使使用,也是各司其职
为了避免纯代码创建 UI 的繁琐工作,还有很多公司使用 XIB
在早期版本的 Xcode 中,只要在 Storyboard 中挪动一下位置,storyboard 就会被标记为修改状态,Xcode 7.3 得以改善