美文网首页
源代码管理之Git

源代码管理之Git

作者: caiyajie | 来源:发表于2019-12-11 09:36 被阅读0次

    一、与SVN对比

    • 区别:SVN是集中式管理,git是分布式管理。在很多情况下,git的速度远远比SVN快。另外:SVN使用分支比较笨拙,git可以轻松拥有无限个分支。SVN必须联网才能正常工作,git支持本地版本控制工作。旧版本的SVN会在每一个目录置放一个.svn,git只会在根目录拥有一个.git
    • 流程对比:
    svn checkout —— git clone
    //svn 只下载代码, git 会连同代码仓库一起下载下来
    svn commit —— git commit
    //svn 是提交到服务器,git 中是提交到本地仓库,需要使用push才能提交到服务器
    svn update - git pull
    //都是从服务器下载最新被修改的代码
    
    • 分布式和集中式最大的区别在于:在分布式下,本地有个代码仓库(服务器数据库),开发者可以在本地提交; 而集中式版本控制, 只有在服务器才有一个代码仓库, 只能在服务器进行统一管理

    二、Git工作原理

    • 工作区:与.git文件夹同级的其他文件夹或者子文件夹。
    • 版本控制库:.git目录,用于记录版本信息。
    暂缓区
    分支(Git不像SVN那样有主干和分支的概念. 仅仅存在分支,其中master分支为默认被创建的分支,类似于SVN中的主干)
    HEAD指针:通过控制该指针指向不同的分支,就可以切换。
    
    • 操作原则: 所有新添加/删除/修改的文件 必须先添加到暂缓区(git add),然后才能提交到HEAD指向的当前分支中(git commit)

    三、使用环境

    1. 单人开发只需要一个本地库
    • 原因:不需要与他人共享代码,只负责管理自己代码即可;例如提交代码,删除代码,版本控制等等
    1. 多人开发时需要一个共享版本库,共享版本库的形式:
      -本地共享库:文件夹/U盘/硬盘
      -远程共享库:自己搭建git服务器/ 托管到第三方平台(例如github, oschina)
    2. 无论是单人开发还是多人开发,客户端都可以使用命令行或者图形界面使用git

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

    git命令格式&&必学命令

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

    git命令使用流程

    1.初始化一个本地仓库

    • cd path 切换目录
    • git init 初始化一个本地仓库
    1. 配置仓库
    • git config user.name “shunzi”
    • git config user.email "shunzi@qq.com"
    • git config -l 查看配置信息(.git -> config打开)
    1. 创建文件并提交
    • touch main.c(git status此时创建的文件为红色,没有放到暂缓区)
    • git add .(将工作区所有文件添加到暂缓区,此时为绿色)
    • git commit -m “注释”
    1. 修改文件并提交
    • 修改文件(git status查看文件状态)
    • git add .
    • git commit -m “注释”
    1. 删除文件并提交
    • git rm person.h
    • git commit -m “注释”
    • 另外手动删除,删除状态的文件在工作区需要先使用git add.加入暂缓区,再commit.
    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. 补充
    • 文件状态(git status)

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

    • 版本号的含义

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

    • vim编辑器

    进入命令模式:等待编辑命令输入;所有输入的内容都被当做命令来执行(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(未忽略的缓存删除)
    

    相关文章

      网友评论

          本文标题:源代码管理之Git

          本文链接:https://www.haomeiwen.com/subject/lipdcqtx.html