• git
  • 参考资料
  • 工具安装
  • git 安装注意
  • beyond comparer settings
  • diff viewer setting
  • Merge Tool setting
  • show log context menu
  • network setting
  • try git
  • 基础练习
  • 冲突
  • 制造冲突
  • git 培训
  • git pull auto rebase
  • git 培训 2020-4-21
  • git 练习
  • git

    参考资料

    参考网站:
    https://www.kernel.org/pub/software/scm/git/docs/
    http://git-scm.com
    git pro 中英文版:
    http://pan.dajxyl.com/ebooks/git/
    自带文档,在命令行输入git help <cmd>,比如想了解merge,输入:
    git help merge

    工具安装

    官方下载,也可以这里:
    git
    TortoiseGit(简称ttg)
    beyond comparer(简称bc)

    git 安装注意

    这里要选第三项,这样git自带的linxu命令集也可以在命令行中使用了。这些啥?参见这里
    这里必须这样选,不要问我为什么!哪天你掉坑里了就知道了
    其他地方都保持默认选项,安装完成即可。
    lv1= lv2= type=

    beyond comparer settings

    ttg自带的比较、冲突软件不是很好用。推荐beyond comparer。先设置比较(Diff Viewer),在 explorer 的任意位置右键进行设置:

    diff viewer setting

    设置 diff viewer(根据自己的 bc 安装路径设置):

    Merge Tool setting

    再设置合并工具(Merge Tool):如我的设置为:C:\Program Files (x86)\Beyond Compare\BCompare.exe %mine %theirs %base %merged。注意根据自己的安装路径修改,%mine 这些为参数,不要修改,照抄配置就行。

    show log context menu

    因为 show log 经常使用,因此将他提到顶级菜单:
    设置后菜单变成这样了:

    network setting

    使用 git 的 ssh(~/.ssh/id_rsa),这样不再依赖 pagent

    try git

    光说不练是永远也掌握不好git的。而git的最强大之处在于协同开发的支持。其实我们完全不需要任何git服务器就能模拟一个服务器+两个用户协同开发的情景。找一个测试目录,建立以一个空文件夹server,再进入server,执行命令:git init --bare,这样就建立了一个本地的服务器,目录结构如下:
    返回server所在目录(try_git),分别clone两个仓库出来:
    注意,两处红圈换成自己的目录。
    这样就形成了下面的结构,u1,u2用来模拟两个用户:
    分别为两个仓库设置两个username,否则在log中看到的都是全局配置的username:
    在u1下执行:
    git config --local user.name u1
    在u2下执行:
    git config --local user.name u2
    练习git,最好不要在生产项目中练,一来很多权限你可能不具备,试不出效果来;二来不一小心,还可能造成很严重的后果。。
    lv1= lv2= type=

    基础练习

    现在,我们可以在u1、u2中练习一下基本操作了(请自行在网上查找这些命令的用法),如:
    本地操作:
    commit add checkout branch reset merge/rebase log diff
    远端操作:
    pull fetch push remote

    冲突

    并行开发必然会遇到冲突,项目越大,冲突越多,越难解决。有些人一看到冲突就发憷,是因为他还不懂得如何使用一些工具。

    制造冲突

    要学会如何处理冲突,我们得先能制造冲突。就像做安全防御,你不懂进攻,如何防守呢?
    制造冲突很简单:两个用户,同时针对同一个文件的一个地方进行修改。比如u1进行了如下修改,并commit、push到server:
    在同时,u2进行了如下操作并commit:
    commit后尝试push到server会报错,此时需要先把server上的代码(u1的commmit)拉下来,合并后才能push。但合并时会报冲突:
    到了这一步,就必须要借助工具才能很好的解决问题了(这个demo太简单,也许你可以手动解决,但真正的工程中,手动解决是极其低效,极容易出错的)。
    点击resolve,打开冲突解决界面,所有红色的文件都是有冲突的(status为Conflict)。
    解决的办法是一个一个的鼠标双击,此时会启动bc的三方合并:
    此时去冲突文件所在的目录查看,发现生成了三个文件:
    这三个文件,就是bc用于冲突解决的重要依据,作为输入,并排在bc的上方,并且是只读的,在合并过程中无法编辑。
    最下面的一个窗口是合并结果区,同时可以手动编辑。合并完成后,点击右边的保存图标(),保存合并结果。
    关闭bc,回到ttg,在冲突文件上右键,选择Resolved(点击后BASE、LOCAL、REMOTE这些临时文件将被删除):
    此时文件恢复为正常颜色,status变成了modified,这个文件的冲突解决。
    重复上述操作,直到所有文件冲突解决为止。
    lv1= lv2= type=

    git 培训

    git 规范 
    git 分享 
    git ignore
    永存于历史记录,体积无法变小。
    强推一定要通知所有的人员
    两种操作:local & remote:fetch、pull、push;
    local:编辑 & 形成历史(commits)
    remote:交换commits
    objects
    file:///E:/ebook_decompile/TortoiseGit/Introductio.html
    git cat-file -p <commit>
    tree:root tree就是一个版本
    refs & objects
    Reset Demystified 
    --hard --mixed --soft
    merge
    E:\xjc\yscx_xjc\web\Webadmin\Action\OrderAction.class.php
    cherry-pick & rebase
    3 way merge;冲突解决
    upstream,origin merge
    .gitignroe
    help!!
    git help *, eg: git help log
    <> & []
    一个成功的Git分支模型
    lv1= lv2= type=

    git pull auto rebase

    只有分支间的合并采用merge!其他时候都用rebase。git pull时要用rebase,不要merge!!
    给git pull默认加上rebase功能
    https://blog.csdn.net/zzqhost/article/details/71307716
    git config --global branch.autosetuprebase always
    这样对于新建的分支都会设定上面的rebase=true了。已经创建好的分支还是需要手动配置的
    git config branch.master.rebase true

    git 培训 2020-4-21

    - 一个 commit 只做一件事情,一般情况下可以自由拆分组合,交换顺序等
     - 如何将 commit 移到另外的分支
     - 如何 合并、修改、拆分、删除、添加 commits
    - stage area 暂存区,index,working tree
    - reset、rebase、cherry-pick
     - 确保 working tree clean
    - 分支内 rebase(保持一条直线);分支间 merge
    - 条条道路通罗马,记住最核心的
    - all objects:commit/tree/blob/tag
    - SHA-1: 30ca3c2b48fae7ecb0270cb08542effe2c23978c;哈希值包含所有信息
    思考题:
    - git commt --amend 还是同一个commit吗?
    - 创建分支时会创建对象吗?
    - 删除分支时会删除对应的commit吗?不小心删除了分支怎么办?
    - 自己模拟练习
    分支模型(客户端):
    - 服务器端可以用不同的配置文件来区分环境
    - 主分支、master、开发环境
    - 不同的环境用不同的分支

    git 练习

    962e2d5c893edaf94fc9082234564bd4affdd244
    e -> f
    8243c13041fb1289691a0ee8e4fb6ac568756fd2
    test.txt 丢弃
    重写 dev、master 分支
    dev依赖master,要跟着变