git 学习1:针对个人文档管理和协同开发

  关于GIT ,作用就不怎么介绍,网上搜索有很多的





一:基本命令(针对个人文档的管理)

1.创建一个版本库 ---使用本地的版本库

      $ mkdir myDir
      $ cd myDir
      $ git-init-db
      Initialized empty Git repository in .git/
   创建工作目录 myDir,进入工作目录,并初始化版本库。此时会在myDir/目录下生成一个名为.git的目录,里边有三个文件,分别是存放指向项目当前分支索引信息的HEAD文件、包含项目所有对象的object子目录、保存指向对象索引的refs目录

.git/
  ├─branches
  ├─hooks
  ├─info
  ├─objects
  │  ├─info
  │  └─pack
  ├─refs
  │  ├─heads
  │  └─tags
  └─remotes


2. 在使用 Git 之前,你需要面对 Git 来一番自我介绍。 不喜欢Git不愿透漏姓名的人,因为它要求每个人在向仓库提交数据时,
都应当承担一定的责要向 Git 进行自我介绍。说白了就是用git-log 时,能方便知道是谁修改的东西。


  $ git-config user.name "yin kaizhong"
  $ git-config user.email yinkaizhong@gmail.com

注意,这会在当前repository目录下的.git/config中写入配置信息。 如果git-config加了--global
           选项,配置信息就会写入到~/.gitconfig文件中。 因为你可能用不同的身份参与不同的项目,而多个
           项目都用git管理,所以建议不用--global配置。



2.植入内容跟踪信息
    $ echo "new world" > newfile
        $ git-add newfile

   创建新文件newfile,写入"new world",并用git-add命令将此文件加入到版本库文件索引当中。 ]

3.提交内容到版本库
    $ git-commit -m "add newfile" newfile
      Created initial commit 5ce224d: add newfile
       1 files changed, 2 insertions(+), 0 deletions(-)
       create mode 100644 newfile

    把前面的修改提交到版本库中,前提是已经用git-add命令把此文件加入到版本库文件索引当中。
    也就是说必须先执行git-add  ,  在执行 git-commit

  git-add 命令通常能够判断出当前目录       (包括其子目录)  下用户所添加的新文,
 git-commit 命令的 -a 选项可将所有被修改的文档, 并将其信息追加到索引中。
或者已删除的文档的当前状态提交倒仓库中。

 记住, 如果只是修改或者删除了已被Git 管理的文档,是没必要使用 git-add 命令的。


   如果当前修改的文件太多,又不想一个个的执行git-add ,git-commit
   可以这样:git-add .   //add所有的
         git-commit -a -m "message"   // -a:all 的意思


4.查看当前的工作
git-status可查看当前分支状态,git-diff查看当前分支更改情况

5.分支的使用
      $git-branch mybranch
      $ git-checkout mybranch
      Switched to branch "mybranch"
      $ git-branch -D mybranch
      Deleted branch mybranch.

    创建名为mybranch的分支,并把以后工作转移到这个分支上开展。git-branch带-D选项为删除指定的分支,不能删除用户所在当前分支,必须用git-checkout切换到其他分支才行


6.查看项目的发展变化和比较差异


 git-show-branch用来列出当前版本库中的所有分支,
 git-whatchanged可以列出项目开发中的修改历史。
 git-dff mybranch是来比较当前分支与mybranch分支的差异的,
  当然也可使用 git-diff mybranch anotherbranch对任意两个分支做对比。

7.合并两个分支
     $ git-checkout master
        $ git-merge "Merge work in mybranch" mybranch

   切换到master分支,并把mybranch上的工作合并到master上来。此时有可能有冲突无法合并,会给出警告,用户可根据提示手动合并一些文件


8.逆转与恢复

git-reset [--mixed | --soft | --hard] [<commit-ish>]
--mixed         只撤销掉index中的commit,却保留那个commit对应的内容
                               
--hard                 index和working dir全撤销,也就是commit消失,并且其内容也消失
                                
--soft                 index和working dir都不动,只"require them to be in a good order" (
                                                这是man git-reset中的话,什么意思?) 。这会让该commit修改的文件变
                                                成"dded but not yet committed"的状态。

例子分析:
    git-reset --soft HEAD^   逆转上次提交的版本进度
    git-reset --hard 7182ae4912487692d4f91ded1e74d99e0fc12e49  强行逆转到索引指定的版本,--hard选项要慎重使用,有事可能破坏正常文件。
    git-revert  也可撤销上次对版本库的提交,但这本身也会产生一个commit,用得多了会使log看起来不那么干净

注意:1) git-reset和git-revert不同,后者是把补丁作为另一个commit反向打入tree中,而reset是真正的撤销;
     2) 如果撤销最近的n次commits,就用git-reset HEAD~<n>,例如HEAD~2
删除文件:

   $ git -rm aa.c
   $ git -commit

恢复删除了的文件:(撤消一次提交)

   $ git -log                  //注意查看上次 git -rm后的 git -commit ID
   $ git -revert adb2f08089edac8bf1912a618a74485ab42f2b86         //指定导致删除操作的commit ID,进行撤消


二:Git 协同工作

A:服务器     ip: 192.168.4.200  且已有初始版本库cq8401.git,目录:/project/cq8401.git,有3个用户A,B,C;一个组A;  B,C 属于组A,
    且只有A对/project/cq8401.git  可写的权限
B:clone端   ip: 192.168.4.181
C:clone端   ip: 192.168.4.110

1.克隆远程版本库
命令:
   $git-clone B@192.168.4.200:/project/cq8401.git   [dir name]
   [dir name]是你想让这个仓库叫什么名字。 如果不指定,就会等同于目标仓库的名字。


B:  $git-clone B@192.168.4.200:/project/cq8401.git
  //克隆远程版本库cq8401.git 到B机器的当前目录,目录名字为cq8401.git  

C: $git-clone B@192.168.4.200:/project/cq8401.git C-cq8401  
 
  //克隆远程版本库cq8401.git 到C机器的当前目录,目录名字为C-cq8401

2.B,C 在下载下来的本地版本库中作改动(添加,删除,修改…………)
B:   $echo "B first" > 1.txt
     $git-add 1.txt
     $git-commit 1.txt -m "add 1.txt by B"

C:   $echo "C first" > 2.txt
     $git-add 1.txt
     $git-commit 2.txt -m "add 2.txt by C"        


3.更新远端服务器A上的版本库
方法一:
先接触两个命令:

   $ git-push kongjianjun@127.0.0.1:/srv/git/pigeons.git master:master
      将同步本地版本库中master分支同步到远程服务器上版本库的master分支
   $ git-pull kongjianjun@127.0.0.1:/srv/git/pigeons.git master:master
      将远程服务器上的版本库中的master分支同步到本地版本库的master分支
 
     而且git-pull=git-fetch+git-merge
     具体操作:$git-fetch origin   //克隆上游版本库
        $git-merge HEAD origin  //合并分支


OK 现在对B,C操作
B:
   $git-pull    //push前先更新一下本地的版本库,因为可能在B更新之前,C 或者其他的 用户已经向服务器A push 了代码
   $ git-push  A@192.168.4.200:/project/cq8401.git  master:master
                               //将同步本地版本库中master分支同步到远程服务器A上版本库的master分支
C: 操作同上

方法二:
还有一种方法,就是A  打上B,C传过来的补丁
在B,C上
$ git-fetch origin    (1)  更新 origin 分支,防止 origin 分支不是最新的公共版本,产生错误的补丁文件;

$ git-rebase origin    (2)  将你在 master 上提交的工作迁移到新的源版本库的状态的基础上

$ git-format-patch origin     (3)生成补丁文件

通过email或者其他方式传给A (当然这种库不适合空仓库,即是用命令:git-init --bare --shared创建的库)
在A 上
    $ git-mailinfo msg patch  <   xxx.patch  
               分析邮件,把commit log写到msg文件,补丁写到patch文件。 其他信息打印到标准输出
    $ git-am xxx.patch   
               打上补丁


4. A  作为管理员,有必要每隔一段时间对代码量大小进行维护

        为版本库打包

      $ git-repack
      将对象打包,并保存在 .git/objects/pack 目录当中
      $ git-prune-packed
      清楚那些已经被打过包的原始的对象
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值