git总结

来源:互联网 发布:淘宝店铺转让新规 编辑:程序博客网 时间:2024/04/28 18:52

***************git本地操作***************

01. GIT简介

================================================================================

git是一款开源的分布式版本控制工具

在世界上所有的分布式版本控制工具中,git是最快、最简单、最流行的


02. GIT命令行帮助

================================================================================

$ svn help

查看svn所有命令的帮助

$ svn help 子命令


# 要退出帮助信息,按"q"

# 翻看下页,按"空格"

# 翻看上页,按"CTRL+B"

# 要搜索相关文字,按"/"然后输入"相关文字"


03.创建代码库 & 配置个人信息

================================================================================

1创建代码仓库

$ git init


2配置用户名和邮箱

$ git config user.name lnj

$ git config user.email lnj@gmail.com


* 以上两个命令会将用户信息保存在当前代码仓库中


# 只有配置了用户和邮箱之后,git才能识别出操作的人员信息,通过钩子(hooks)程序可以设置一些动作

# 例如单元测试发现问题后,自动给相关人员发送电子邮件

* 注意暂时不建议投入一毛钱精力


3如果要一次性配置完成可以使用一下命令

$ git config --global user.name lnj

$ git config --global user.email lnj321@gmail.com


* 以上两个命令会将用户信息保存在用户目录下的 .gitconfig文件中


4查看当前所有配置

$ git config -l


04. 实际开发

================================================================================

1创建代码,开始开发

$ touch main.c

$ open main.c


2将代码添加到代码库

# 查看当前代码库状态

$ git status

# 将文件添加到代码库

$ git add main.c

# 将修改提交到代码库

$ git commit -m "添加了main.c"


提示:

*   在此一定要使用 -m参数指定修改的备注信息

*   否则会进入 vim编辑器,如果对vim不熟悉,会是很糟糕的事情


# 将当前文件夹下的所有新建或修改的文件一次性添加到代码库

$ git add .


3添加多个文件

$ touch Person.h Person.m

$ git add .

$ git commit -m "添加了Person"

$ open Person.h

$ git add .

$ git commit -m "增加Person类属性"


* 注意使用git时,每一次修改都需要添加再提交,这一点是与svn不一样的


git 的重要概念及工作原理

--------------------------------------------------------------------------------

工作区

暂存区(staged)

分支(HEAD)


05. 别名 & 日志

================================================================================

$ git config alias.st status

$ git config alias.ci "commit -m"


个人建议:除非特殊原因,最好不要设置别名,否则换一台机器就不会用了


# 查看所有版本库日志

$ git log

# 查看指定文件的版本库日志

$ git log 文件名


# 配置带颜色的log别名

$ git config --global alias.lg "log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit"


提示:在git中,版本号是一个由SHA1生成的哈希值


06.版本号,让我们在任意版本之间穿梭

================================================================================

# 回到当前版本,放弃所有没有提交的修改

$ git reset --hard HEAD

# 回到上一个版本

$ git reset --hard HEAD^

# 回到之前第3个修订版本

$ git reset --hard HEAD~(3)

# 回到指定版本号的版本

$ git reset e695b67


# 查看分支引用记录

$ git reflog


07.单个文件的修改管理

================================================================================

# 查看文件变化

$ git diff

# 撤销对文件做的修改

$ git checkout Person.h

# 从代码库(暂存区中删除文件)



***************git团队开发操作***************



01.建立代码仓库(专门用于团队开发的代码仓库)

================================================================================


# 切换目录

$ cd /Users/lnj/Desktop/git演练/公司/weibo

# 建立空白代码库(专门用于团队开发)

$ git init --bare


02.项目经理准备项目(前奏)

================================================================================


# 切换目录

$ cd /Users/lnj/Desktop/git演练/经理

# "克隆"代码库到本地

$ git clone /Users/lnj/Desktop/git演练/公司/weibo/


# 个人信息配置(因为要演示一台机器上的多人协作,日常开发可以忽略)

$ git config user.name manager

$ git config user.email manager@163.com


.gitignore

--------------------------------------------------------------------------------

.gitignore可以指定哪些文件不纳入版本库的管理


参考网址:https://github.com/github/gitignore


# 命令行中进入与.git同级的目录

$ cd /Users/lnj/Desktop/git演练/经理/weibo


将以下命令一次性粘贴到命令行中

--------------------------------------------------------------------------------

echo -e "# Xcode

#

build/

*.pbxuser

*.mode1v3

*.mode2v3

*.perspectivev3

xcuserdata

*.xccheckout

*.moved-aside

DerivedData

*.hmap

*.ipa

*.xcuserstate

# CocoaPods

#

# We recommend against adding the Pods directory to your .gitignore. However

# you should judge for yourself, the pros and cons are mentioned at:

# http://guides.cocoapods.org/using/using-cocoapods.html#should-i-ignore-the-pods-directory-in-source-control

#

# Pods/" > .gitignore

--------------------------------------------------------------------------------

# .gitignore添加到代码库

$ git add .gitignore


03. 创建项目

================================================================================

提交同时"push"到远程代码仓库


04. 新人加入

================================================================================


...


05.分布式的代码库 - 仅供参考

================================================================================

由于git是分布式的,任何一台计算机上都保留有完整的代码库的内容,因此可以把团队开发的代码库放在任何位置



多个远程代码库之间的同步演练"提示,此演练仅供了解,具体的使用,需要一定的团队规模之后,才能够体会"



06. 分支管理 - Tag

================================================================================

# 查看当前标签

$ git tag

# 在本地代码库给项目打上一个标签

$ git tag -a v1.0 -m 'Version 1.0'

# 将标签添推送到远程代码库中

$ git push origin v1.0


# 使用tag,就能够将项目快速切换到某一个中间状态,例如产品开发线上的某一个稳定版本

# 签出v1.0标签

$ git checkout v1.0

# 从签出状态创建v1.0bugfix分支

$ git checkout -b bugfix1.0


# 查看远程分支

$ git branch -r

# 删除远程分支

$ git branch -r -d origin/bugfix1.0




***************git分支管理***************



01.分布式的代码库 - 仅供参考

================================================================================

由于git是分布式的,任何一台计算机上都保留有完整的代码库的内容,因此可以把团队开发的代码库放在任何位置



多个远程代码库之间的同步演练"提示,此演练仅供了解,具体的使用,需要一定的团队规模之后,才能够体会"



02. 分支管理 - Tag

================================================================================

# 查看当前标签

$ git tag

# 在本地代码库给项目打上一个标签

$ git tag -a v1.0 -m 'Version 1.0'

# 将标签添推送到远程代码库中

$ git push origin v1.0


# 使用tag,就能够将项目快速切换到某一个中间状态,例如产品开发线上的某一个稳定版本

# 签出v1.0标签

$ git checkout v1.0

# 从签出状态创建v1.0bugfix分支

$ git checkout -b bugfix1.0


# 查看远程分支

$ git branch -r

# 删除远程分支

$ git branch -r -d origin/bugfix1.0



***************github的使用及如何学习第三方库***************



如何使用/学习第三方框架?


优秀的第三方框架都在 github.com


1> 搜索

2> git clone 获得完整版本

$ git clone https://github.com/AFNetworking/AFNetworking.git

3> 获取最新版本 git pull

* 进入clone的本地文件夹

$ git pull


4>github上的文档,优秀的第三方框架都有好的文档

5>编写测试程序,看运行结果

6>针对感兴趣的部分,看源代码


7> 有问题去http://stackoverflow.com



***************静态库***************



01.为什么要做静态库

================================================================================


1国内的企业,掌握有核心技术,同时是又希望更多的程序员来使用其技术,因此采用"闭源"的方式开发使用

例如:百度地图,友盟,JPush


2在企业开发中,一些核心技术或者常用框架,出于安全性和稳定性的考虑,也会提供静态库给程序员使用


02.静态库的特点

================================================================================

.a + .h


03.静态库简单演练

================================================================================


1新建CZTools项目

2创建一个类方法,实现一个简单的加法

3编译

#   注意,在编译静态库时,需要编译两个版本 ->真机(arm) | 模拟器(i386)

4新建项目将编译生成的.a + .h拖到项目中使用


04.静态库中的资源包的使用

================================================================================


问题:有些第三方库会使用到一些图片素材,例如公司的logo等。


但是由于Xcode默认在编译时会把所有的素材文件导入到mainBundle中,为了避免与使用静态库的程序冲突。

在静态库中如果要使用图片素材,会利用bundle的手段


1建立bundle,并且向其中添加图片

2创建一个类方法,返回图片

3编译

4调用方如果需要使用,需要导入 .h + .a + XXX.bundle


05.静态库中的自定义视图

================================================================================

问题:程序需要测试

静态库如何测试呢?


创建复合项目


1复习块代码传值


06.静态库的使用

================================================================================


新建项目将编译生成的.a + .h拖到项目中使用


07.静态库的种类

================================================================================


静态库文件的版本(4)

1.真机-Debug版本

2.真机-Release版本

3.模拟器-Debug版本

4.模拟器-Release版本


调试版本 VS 发布版本

--------------------------------------------------------------------------------

- 调试版本会包含完整的符号信息,以方便调试

- 调试版本不会对代码进行优化


- 发布版本不会包含完整的符号信息

- 发布版本的执行代码是进行过优化的

- 发布版本的大小会比调试版本的略小

- 在执行速度方面,调试版本会更快些,但不意味着会有显著的提升


08.静态库的合并

================================================================================


# 检测.a的类型

$ lipo -info libCZTools.a


# 合并.a

lipo -create Debug-iphoneos/libCZTools.a Debug-iphonesimulator/libCZTools.a -output libCZTools.a


# 合并.a的好处,开发过程中既可以在真机上调试,也可以在模拟器上调试

# 合并.a的坏处,如果静态库太大,合并打包后,会非常大,因此很多第三方的静态库的.a是区分版本的

# 今后在使用.a时一定注意版本



***************gitclass笔记总结***************

1.新建一个本地仓库

$ git init


2.配置仓库

》告诉git你是谁

git config user.name lnj

》告诉git怎么联系你

git config user.email lnj@itcast.cn


》上面一种配置方式是一次性的配置, 会配置到被管理文件的。git文件夹下

》下面一种配置方式是一劳永逸的方式:

git config --global user.name lmj

git config --global user.email lmj@itcast.cn


》如何学习git指令

>学习git指令和SVN指令的学习其实是一样的,只不过展现的方式不太一样, git是通过使用指南的方式告诉我们某一个指令如何使用

>这个指南其实是一个不可编辑的vim

Q退出指南

按空格下一页

control + B 上一页

/需要搜索的内容可以进行搜索



git常规指令

git status 查看文件状态

git add 添加文件到暂存区

git commit 文件名称   添加文件到本地仓库

注意:如果没有在commit后面加上 -m说明修改了什么,会自动进入vim界面,要求我们输入修改信息

按键盘上的 i 代表开始输入内容

输入完毕之后按 esc 然后按wq

所以: 如果以后在终端中提交最好在后面加上-m

》注意: git中的addSVN中的add不太一样, SVN中只需要add一次,git中每次新建或者修改之后都需要重新add


1.为添加之前的颜色

红色 代表在工作区

2.添加到暂存区之后的颜色

绿色 代码在暂存区



》注意: git默认没有简写指令

》注意: 一般情况下不建议自定义简写指令

git中的简写称之为起别名


> 查看log

git log 文件名

》注意: GIt中的版本号是一个40的哈希值,SVN中的版本号是一个递增的整数

》已经提交

git reset —hard HEAD^ 返回上一个版本

其中—hard代表强制重置

git reset —hard 版本号(只需要写前7位)

》未提交

git checkout 文件名回退到上一次提交的版本

git reset —hard HEAD  回退到上一次提交的版, 注意HEAD后面没有尖号^



c9ad690 HEAD@{0}: commit: main.c


7026f99 HEAD@{1}: commit:输出结果


e950c89 HEAD@{2}: commit: 新增输入


c7bf91c HEAD@{3}: commit: 添加变量


cbd9e52 HEAD@{4}: commit: 删除print函数


45ea44d HEAD@{5}: commit:添加了printf函数


0da06d8 HEAD@{6}: commit (initial): i




>git reflog  查看所有修改信息(所有版本)



》查看文件被修改的什么地方

git diff文件名

》如果显示绿色代表新增

》如果显示红色代表删除



远程仓库

SVN需要一个单独的服务器

Git不需要: 文件中、U盘中、云上、githubOSChina...


1.新建git远程仓库

git init —bare

注意: 这个仓库仅仅是用于管理代码,不参与开发


2.项目经理初始化项目

2.1先克隆一份空得仓库到本地

git clone /Users/apple/Desktop/working/公司远程仓库


2.2忽略不需要加入版本控制器的文件以及文件夹

.gitignore

注意: 配置忽略文件只需要到github上搜索.gitignore拷贝别人写好的代码即可

配置.gitignore一定要在和.git隐藏文件夹同一级的目录下

2.3生成好.gitignore文件之后,还需要将.gitignore文件添加到版本控制

git add  .gitignore

git commit .gitignore -m””


2.4新建项目

source conrol—>commit 将代码提交到本地仓库

source conrol—>push将代码提交到远程仓库



git中默认就会创建一个分支,这个分支叫做origin/master相当于svn中的trunk



专业人员只需要在git仓库的hooks文件夹中写一些指令,就可以完成自动测试(压力测试、自动测试、集成测试、冒烟测试、。。。)



SVN一样,如果服务器仓库的代码被修改了, 我们再提交代码也会报错。

fetch first == out of data


总结:

gitsvn最大的区别

1.git每次修改新增都需要add

2.git每台电脑都有一个仓库

3.git是先提交到本地仓库,再提交到远程仓库





新人服务器搭建

1.新建一个新人服务器

2.初始化仓库

git init --bare

3.添加一个新的远程仓库

source control —> master —>config —>remotes —>add —> add remote

4.将经理最新的代码提交到新人服务器

5.经理分配新人服务器的地址给新人




GIT的分支管理

》在本地代码库给项目打上一个标签

git tag -a v1.0 -m 'Version 1.0’

》查看当前标签

git tag

注意: 此时此刻打上的这个标签仅仅是一个本地标签。(和服务器没有关系)

》将标签添推送到远程代码库中

git push origin v1.0



1.开发

2.发布

3.保存稳定版本

4.继续开发

5.出现bug

6.分配员工到分支上修复bug

>员工从服务器下载最新代码

》员工利用git checkout v1.0指令快速切换到1.0版本

》根据提示:开启一个新的分支开始修复代码

git checkout -b 1.0bug_fix


7.合并修复后的代码到主线

8.备份稳定版本





通过Xcode将代码提交到github上,把仓库放在github



=======================================================

1.注册一个github账号

2.配置SSH Keys只要配置了SSH Keys就可以和github无缝衔接


》点击昵称来到个人主页

点击主页中的设置(setting

点击SSH Keys

》点击 generating SSH keys


1.检查本地的ssh keys

用户目录 ls -al ~/.ssh

2.如果文件夹不存在需要手动创建一个

mkdir .ssh


3.根据github的提示2生成ssh keys

.ssh目录下执行 ssh-keygen -t rsa -C"your_email@example.com”

输入完成之后连续按下回车, 知道出现牛逼的图形位置

4.生成完公钥和私钥之后输入

ls -la查看是否生成成功   id_rsa(私钥) id_rsa.pub(公钥)

5.根据提示3获得公钥

pbcopy < ~/.ssh/id_rsa.pub

6.点击 setting — ssh key —>add ssh key

将刚才获取到得公钥添加进去


7.更具github4步提示,验证公钥

验证成功网页上的灰色圆点会变成绿色


8.拷贝到公钥之后打开github主页

》点击仓库(Repositories

》再点击new来到github创建仓库界面


9.通过github提供的地址下载一个空得仓库到本地

》创建一个新的项目到本地仓库文件夹中

》利用Xcode提交代码到github

》注意: 要求输入用户名密码时候,输入的是github上显示的昵称而不是登录账号


=======================================================







现实生活:

运动场 == 物理仿真器

跑步 == 物理仿真行为

== 仿真元素


// 1.创建物理仿真器

// 2.创建物理仿真行为

// 3.将物理仿真行为添加到仿真器中






0 0