zoukankan      html  css  js  c++  java
  • git曲线

    git 更新牵涉到三个地方的内容: ??

    (pull下来的) 正在编辑的目录, 即工作空间;

    本地的仓库;   (这个动作叫 : commit)

    github.com上的服务器即 refs (这个动作叫: push)

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

     所有对仓库的操作,都要经过git来做...

    rm是对本地仓库的文件和目录进-+行操作; commit也是对本地仓库的操作;

    push才是对remote的refs服务器进行操作

    add是将工作空间所做的修改(文件/目录的增删改)做一个标记, 在下一次commit时一并提交到本地repository.

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

    原则上vim可以无限制地新开窗口, "这里所说的窗口"不是新的 程序窗口, 而是同一个窗口中的"窗格"

    看vim在哪一个窗口, 主要是看它的"状态栏", 状态栏高亮显示的即为当前窗口; ctrl+WW是按顺时针方向轮转的

    func! 加上感叹号, 是为了防止 vimrc这个配置文件重新载入时, 报错/出错

    关闭其他窗口: ctrl+w o = :only

    强制命令! 总是放在最后的: 如对多个文件都放弃保存并且退出: qa!

    vim分割窗口, 在纵向方向上可以不同,  而在水平方向上要保持一致, 使用^W +/-,  :res n/+n/-n,  : vert res n/+n/-n,

    所有这些操作都可以用鼠标来实现.

     vim的多标签: 在高亮显示的/并且是凸起来的标签, 表示是当前活动的; 灰色(或灰色底子的) /凹陷下去的是inactive tab.自己设计程序界面的话,

    也应该是这样的. 首选的是使用buffer, 其次才使用tab, 切换标签的快捷命令: gt, gT.

    ::: 让vim的工作目录自动切换到当前打开的文件所在的目录: set autochdir

    vim中的大小写转换(是针对文章的字符而言的): great(大小写) u, U : gu, gU , ~翻转. 可以对gu gU 进行限定, 一般是在后面进行限定,对于行的操作, 把限定行号放在前面.同时vim命令中当前位置通常省略不写: guu, gUU, g~~, gU$, gu0, 3gUU, gggUG(全部转换为大写)

    :vim的命令行实际上就是一个bash-like, 可以看成是一个bash, 完全支持bash的操作: ctrl+p/n, ctrl+h, 支持tab补齐, 支持ctrl+d:

    ctrl+d将会把以当前字母开头的所有命令列出来, 如果直接type:  ctrl+d, 将会把所有的命令行命令都列出来.(从而可以查看/学习)

    :支持简写, 只要该简写没有其他模糊confused, 二义性的命令都可以直接执行,不用像bash那样一定补齐

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

     实际上git的操作和yum的操作类似: 他的一些操作和本地的操作如:rm, mv等类似:

    git共涉及三个地方: working directory,  staging index,

    有三种vcs: local vcs, centralization vcs, distribution vcs> 本地化/集中/分布式控制系统

    vcs 和cvs的区别?

    vcs: version control system

    cvs: con'current [k^n'k2r2nt] version system : 并行(同时发生)版本控制.

    git的算法本质是每次版本保存一个文件快照snapshotA(a1,b,c) snapshotB(a2,b,c2)...

    svn的算法本质是每次版本仅保存文件之间差异,delta1,....

    git分支默认的是一个master, 每次提交时会将master指针指向当次commit的snapshot快照

    git鼓励分支,  可以在不同的分支上开发下去, 形成几个方向:

    git版本控制信息存储的原理: 是让当前分支的指针(用head指针来表示)指向所在的分支, 这个分支是和一个文件快照snapshot相对应的:  :  创建一个分支实际上是创建一个文本文件, 里面只有40个字符(是

    所指对象的sha-1校验码)...所以创建和删除一个分支的开销成本极小, 而且跳转到某个版本也极为快速...

     创建分支: git branch brach2, 查看分支: git branch,  或git status.

    git checkout的作用有两个: 一是获取分支的内容, 二是切换分支: git checkout another-branch.

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

     git commit -am "msg": 中的-a表示 --all: 表示: automatically add changes of all known files and remove files from the index that have been removed from the working tree

    -a 会影响所有已经在index中的文件, 但不会影响没有加入到staging index中的文件...

     gnu nano: 纳米: 是一个编辑器:

    修改错误跟踪系统iss53的错误:

    git checkout -b iss53:   =git branch iss53 + git checkout iss53:  创建一个分支并切换到那个分支.(参数-b就是那个功能)

    分支的合并:

    git中的分支使用得非常频繁, 非常普通的, 每次在修改/修补, 进行新的动作之前, 最好都是在新建一个新的分支然后进行开发操作, 而不会

    影响原来的版本:

    git 合并: : 首先切换到master分支:git checkout master , 然后合并: git merge testing.

    git merge合并其实就是指针(分支就是指针)的移动, 将master指针 fast-forward 快进移动到 testing指针上.

    合并后,需要把非master分支删除(因为这个和master指针分支是相同的): git branch -d testing.

    注意::: 对于没有共同祖先common ancestor的分支合并, git会自动寻找到一个合适的"最近"的共同祖先, 然后三方(祖先方/合并双方)

    共同算法,得到一个合并后的分支... (就是要明白git的分支/版本的数据结构)...

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

    以上都是在本地的仓库中进行的操作, 要在本地和远程仓库之间进行操作,需要用 git push (向上提交:从本地到远程), git pull(从远程到本地)

    但是如果远程服务器上的文件被另外一个本地机器事先进行了push操作后,  再提交就会有冲突..

    (git: gnu interactive tools: gnu交互工具):: 是取代bitkeeper, " stupid content tracker" , 最后由"主开发者"向"公共服务器"push代码...

    git help some-command: :git commit...其中git是命令command, commit是子命令: sub-command,

    git add 可以跟踪文件夹下的所有文件: git add ./path/to/your/path,   git add -A....

    git add 是脚本命令, 是git内核命令 update-index内部命令的"别名"

    git reset HEAD <filename> 删除index中新增的文件...

    git diff:是比较"当前工作目录" && "数据仓库"中的文件的内容的差别.... 用patch的格式给出:

    $ git branch -d branch-name
    但是需要注意的是,如果删除的分支还没有被 merge 到其他分支,删除这样的分支会导致这个分支上所做的改动丢失,因此 git branch -d 命令会失败,提示你这样做会丢失信息。如果你的确想删除这样的分支,不怕信息丢失,那么可以使用 git branch -D 命令,这个命令不会去判断分支的merge状态,例如:
    $ git branch -D branch-name

    通常建议使用 -d 参数来删除分支,以防无意的信息丢失

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

    查看git版本的世系变化:

    git show-branch

    git diff ver1 ver2

    git whatchanged

    git 合并冲突?

    为了保存多个人的工作, 需要把每个人自己创建的分支进行合并, 以便保留多人合作开发的成绩和工作.

    2-way 两路合并: 合并merge的方法是:

      1,   切换到master, 然后,将其他分支中有的文件/而master中没有的文件记录在master中去,

      2,,   如果被合并分支和master中都有的文件(文件名相同的两个文件):    将两个文件的内容进行比较,

            - 先后的行合并,

            - 但是当相同的行, 内容相同时, 取相同内容,   

            -  但是当相同的行上, 内容不同时, 则会发生"conflict"冲突.

        (通常的解决方法是:  要么: 取其中的某一个patch, 抛弃另一个patch, 要么综合两个文件的patch都要都保留) 

    git commit -m "sss"  -i hello???

    git 中的refs: 是指git的索引或参考,保存的是 HEAD当前头指针指向的内容??

    Git 中,我们称之为“引用”(references 或者 refs,译者注)。你可以在 .git/refs 目录下面找到这些包含 SHA-1 值的文件 (这个是明确肯定的说法了, refs 主要是用指针名称来代替具体的"提交/添加等操作"的标志字符串sha-1字串...

    我认为你应该这样来理解分支的概念:它是用来标记特定的代码提交,每一个分支通过SHA1sum值来标识,所以对分支进行的操作是轻量级的--你改变的仅仅是SHA1sum值。

    分支确实有些特殊的属性——其中最重要的是,如果你在一个分支进行作业并创建了一个新的提交(commits),该分支的顶端将前进到那个提交(commits)。这正是你所希望的。当用git merge 进行合并(merge)的时候,你只是指定了要合并到当前分支的那个并入分支,以及当前分支的当前进展

  • 相关阅读:
    int,long int,short int所占字节
    NSArray Sort
    Foundation Kit
    界面构建
    主题存放问题
    ObjectiveC中委托和协议
    IOS中编码转换方法(转)
    螺旋队列
    如何在多台机器上共享IOS证书
    Xcode 中使用Github
  • 原文地址:https://www.cnblogs.com/bkylee/p/4936184.html
Copyright © 2011-2022 走看看