源代码管理之Git

2019-12-11  本文已影响0人  caiyajie

一、与SVN对比

svn checkout —— git clone
//svn 只下载代码, git 会连同代码仓库一起下载下来
svn commit —— git commit
//svn 是提交到服务器,git 中是提交到本地仓库,需要使用push才能提交到服务器
svn update - git pull
//都是从服务器下载最新被修改的代码

二、Git工作原理

暂缓区
分支(Git不像SVN那样有主干和分支的概念. 仅仅存在分支,其中master分支为默认被创建的分支,类似于SVN中的主干)
HEAD指针:通过控制该指针指向不同的分支,就可以切换。

三、使用环境

  1. 单人开发只需要一个本地库
  1. 多人开发时需要一个共享版本库,共享版本库的形式:
    -本地共享库:文件夹/U盘/硬盘
    -远程共享库:自己搭建git服务器/ 托管到第三方平台(例如github, oschina)
  2. 无论是单人开发还是多人开发,客户端都可以使用命令行或者图形界面使用git

四、Git命令行演练-个人开发

git命令格式&&必学命令

git help [子命令]
和学习SVN指令是一样的,只不过git是通过使用指南的形式展示给用户看(不能编辑的vim编辑器),使用q退出vim编辑器,按空格进入下一页,ctrl + B 回到上一页; /关键字 进行搜索

git命令使用流程

1.初始化一个本地仓库

  1. 配置仓库
  1. 创建文件并提交
  1. 修改文件并提交
  1. 删除文件并提交
  1. 日志查看版本回退

git log (person.m)
git reflog 简洁版日志

git reset —-hard HEAD 重置到当前版本
git reset —-hard HEAD^^ 重置到上上个版本(一个^代表上个)
git reset ——hard HEAD~2 重置到往上2个版本
git reset —-hard 七位版本号 重置到指定版本(git reflog 查看版本日志)

git config alias.st “status” 此后git st == git status
git config alias.ci “commit -m”
git config --global alias.st “status”所有项目都配置了别名
//--global可以进行全局配置,所有的版本库共享此配置,查看全局配置(桌面前往->个人->xiaomage->.gitconfig)
//设置全局的版本日志查看配置,版本日志好看一些
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"
  1. 补充

红色: 代表被添加或者修改的文件没有被添加到暂缓区
绿色: 代表文件在暂缓区,等待提交

版本号是一个由SHA1生成的40位哈希值
这样做的目的是保证版本号的唯一

进入命令模式:等待编辑命令输入;所有输入的内容都被当做命令来执行(vim person.m进入文件的命令模式)
i插入模式:输入的所有内容都被显示,并被当做文件内容处理esc退回命令模式
命令行模式(冒号:):执行待定命令(保存文件并退出: wq ; 强制退出不保存: q! )

五、Git命令行演练-团队开发

1. 共享库分类

本地共享库(只能在本地面对面操作)
- 电脑文件夹/U盘/移动硬盘

远程共享库(可通过网络远程操作)
- 自己搭建Git服务器(不建议)
- 在Github上托管项目(** 建议)
Github网址(https://github.com); 公开项目免费, 私有项目收费
- 在OSChina上托管项目(
推荐**)
OSChina网址(https://git.oschina.net) 安全免费,在国内访问速度快

2. 搭建本地共享库,第一人初始化项目到本地共享库

原因: 多人合作开发,代码共享
命令: git init —-bare
命令: git clone 本地代码仓库地址,并在clone下来的共享库内创建项目并提交到搭建的本地共享库, 其他同个人开发

3.修改同一文件造成冲突解决(未冲突文件可直接pull,不会覆盖新修改)

Your local changes to the following files would be overwritten by merge……
先add commit 或者使用下面方法:

git stash: 备份当前的工作区的内容,从最近的一次提交中读取相关内容,让工作区保证和上次提交的内容一致。同时,将当前的工作区内容保存到Git栈中。
git pull:拉取服务器上的代码;
git stash pop: 从Git栈中读取最近一次保存的内容,恢复工作区的相关内容。由于可能存在多个Stash的内容,所以用栈来管理,pop会从最近的一个stash中读取内容并恢复。
git stash list: 显示Git栈内的所有备份,可以利用这个列表来决定从那个地方恢复。
git stash clear: 清空Git栈。此时使用gitg等图形化工具会发现,原来stash的哪些节点都消失了。

六、Git命令行演练-团队开发

** 注意: 添加忽略文件, 不然Xcode有可能会把没必要的文件提交**
** 必须在使用Xcode之前把忽略文件添加进来, 因为Xcode创建工程时, 默认直接把所有文件添加到暂缓区, 加进去之后忽略文件对其就无效了**

七、OSChina的使用

1. 托管项目到OSChina
  1. 打开oschina网站:[https://git.oschina.net]
  2. 注册账号(OneShunzi)
  3. 点击创建新仓库[https://git.oschina.net/projects/new]
  4. 填入项目名称,描述等信息
  5. 创建完成
  6. 可根据生成的版本库地址进行克隆下来进行操作
  1. 怎样加入合作伙伴?
//配置了name后提交显示configname,配置了email显示该账号的oschina名,否则显示主机名
1. 点击”管理”-\>项目成员管理-\>选择成员权限进行创建
2. 或者直接只用SSH(以下是生成公钥私钥方法)
      cd ~/.ssh//查看是否存在
      open .
//若存在,打开里面存放着三个文件id_rsa、id_rsa.pub、known_hosts
//将id_rsa.pub(公钥ssh key)里的内容全部复制到服务器端(例如gitHub或gitLibe的公钥sshkey)
//id_rsa为私钥文件,要存储在本地保密
      ssh-keygen -t rsa -C "youremail@example.com" //不存在则生成
//通过ssh加入的合作伙伴通过ssh clone

另、问题:中途加入.gitignore

.gitignore文件(只对工作区有效)配置规则:http://www.cnblogs.com/haiq/archive/2012/12/26/2833746.html
----在真实开发中,配置.gitignore文件 , 去github里面搜索gitignore 选择OC版本的,拷贝到本地仓库即可,记得添加到本地版本库

  1. git rm -r --cached .DS_Store 删除远端仓库的DS_Store,然后加入.gitignore
The following untracked working tree files would be overwritten by checkout
查看git status  add commit后仍不可用如下方法:
git clean -d -fx删除 一些 没有 git add 的 文件
  1. 下拉代码无关文件冲突
    Cannot merge binary files: ...
    CONFLICT (content): Merge conflict in LucyDream/LucyDream.xcodeproj/project.xcworkspace/xcuserdata/qiaoli.xcuserdatad/UserInterfaceState.xcuserstate
    Automatic merge failed; fix conflicts and then commit the result.
git rm --cached *xcuserstate
git rm --cached .DS_Store
git rm --cached [YourProjectName].xcodeproj/project.xcworkspace/xcuserdata/[YourUsername].xcuserdatad/UserInterfaceState.xcuserstate(未忽略的缓存删除)
上一篇 下一篇

猜你喜欢

热点阅读