龚哥哥 - 山里男儿 爱生活、做自己!
Git使用教程
发表于 2015-9-17 | 浏览(5797) | 服务器

分支管理架构图

Image

基本操作

拉取分支数据
    默认master分支
        git pull

    指定分支
        git pull origin master

提交数据
    添加到暂停区
        提交当前目录下的所有文件
            git add .

        提交当前仓库所有文件
            git add *

        指定目录或文件
            git add dirname test.php hello.txt

    添加到当前分支
        git commit -m '注释'

    提交到远程仓库
        git push

撤销修改
    git checkout .   # 放弃所有修改
    git checkout test.php   # 放弃test.php文件修改
    git clean -fd   # 放弃新创建的目录或文件

    如果已经添加到暂停区了怎么撤销?两步完成(git add test.php)
        git reset HEAD test.php
        git checkout test.php

版本回退
    回退到上一个版本
        git reset --hard HEAD^

    指定版本号(如果电脑有重启,使用 git reflog)
        git log
            commit 4aa614980a3db998f3f6299f7c22e82f4e248e27
            Author: 龚福祥 <gongfuxiang@gongfuxiangdeMacBook.local>
            Date:   Thu Aug 27 21:47:26 2015 +0800

                gitignore

            commit d496317fc6e0de1697bcebd1dcd0120eaac5b578
            Author: 龚福祥 <gongfuxiang@gongfuxiangdeMacBook.local>
            Date:   Thu Aug 27 21:45:32 2015 +0800

                del temp

            commit 2663f5a91403065f83091087286d9bd7c2368afb
            Author: 龚福祥 <gongfuxiang@gongfuxiangdeMacBook.local>
            Date:   Thu Aug 27 21:31:48 2015 +0800

                dev update

        比如我们回退到 d496317fc6e0de1697bcebd1dcd0120eaac5b578 版本号不用写全,git会自动取找,前几位就行
            git reset --hard d496317fc
                HEAD is now at d496317fc dev update

回退成功后提交到远程仓库
        git push origin master

文件夹/文件管理

文件删除
    git rm test.php

删除文件夹以及文件夹下面的文件
    git rm -r dirname

文件命名
    git mv test.php new_file_name.php

提交到本地仓库
    git commit -m '文件命名'

提交到远程仓库
    git push

分支管理

创建分支
    git branch develop

切换分支
    git checkout develop
        当前分支前面标记一个*号
        * develop
              master

创建分支并且切换到新创建的分支
    git checkout -b develop

fetch只会拉取远程分支最新版本,不做merge操作
  git fetch origin test
  git checkout test

查看本地分支
    git branch

查看远程分支
    git branch -a

重命名本地分支名称
    git branch -m develop new_name

推送本地分支到远程
    git push origin develop

删除本地分支
    git branch -d develop

删除远程分支
    git push origin --delete develop
    git push origin :develop   [git v1.7.0之前]

合并某分支到当前分支
    git merge develop

标签管理

创建标签
    git tag v_0.0.1

创建历史版本标签
    查看历史提交的commit id
        git log --pretty=oneline --abbrev-commit
            97ccfa5 test
            4aa6149 gitignore
            d496317 del temp
            2663f5a dev update

    比如要对2663f5a打标签
        git tag v_0.0.1 2663f5a

查看所有标签
    git tag

提交一个标签到远程
    git push origin v_0.0.1

提交所有未提交到远程的标签
    git push origin --tags

删除本地标签
    git tag -d v_0.0.1

删除远程标签
    git push origin --delete tag v_0.0.1
    git push origin :refs/tags/v_0.0.1   [git v1.7.0之前]

获取远程标签
    git fetch origin tag v_0.0.1

暂时提交到缓存

提交修改的数据到缓存
    git stash

查看缓存数据列表
    git stash list

恢复数据并删除缓存数据
    git stash pop

恢复数据不删除缓存数据
    git stash apply

多次stash后可以使用序号恢复
    git stash apply stash@{0}

删除缓存数据
    git stash drop

git使用规范

1;开发不同功能需创建不同分支,如果涉及到多人开发,需提交到远程仓库一起在新的分支中开发。

2;合并分支前打tag标签,版本号明确。

3;提交代码注释写详细

阅读全文

CentOS安装Git服务器 Centos 6.4 + Git 1.8.2.2 + gitosis
发表于 2015-8-31 | 浏览(5046) | 服务器
================ git服务器安装 ====================

CentOS安装Git服务器 Centos 6.4 + Git 1.8.2.2 + gitosis##

    1.查看Linux系统服务器系统版本

        cat /etc/redhat-release   # 查看系统版本

        CentOS release 6.4 (Final)

        ifconfig                 # 查看服务器的IP
        eth0      
              Link encap:Ethernet  HWaddr 00:23:8B:FA:78:92  
              inet addr:192.168.100.202  Bcast:192.168.100.255  Mask:255.255.255.0
              inet6 addr: fe80::223:8bff:fefa:7892/64 Scope:Link
              UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
              RX packets:543645 errors:0 dropped:0 overruns:0 frame:0
              TX packets:157155 errors:0 dropped:0 overruns:0 carrier:0
              collisions:0 txqueuelen:1000
              RX bytes:383527379 (365.7 MiB)  TX bytes:13270106 (12.6 MiB)
              Interrupt:16

    lo        Link encap:Local Loopback  
              inet addr:127.0.0.1  Mask:255.0.0.0
              inet6 addr: ::1/128 Scope:Host
              UP LOOPBACK RUNNING  MTU:16436  Metric:1
              RX packets:0 errors:0 dropped:0 overruns:0 frame:0
              TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
              collisions:0 txqueuelen:0
              RX bytes:0 (0.0 b)  TX bytes:0 (0.0 b)

    2.在服务器上安装git及做些操作

     - 执行命令
    sudo yum install curl-devel expat-devel gettext-devel openssl-devel zlib-devel perl-devel

     - 同时下载git-1.8.2.2.tar.gz文件,然后将其`mv` 到`/usr/local/src`目录。[git-1.8.2.2.tar.gz安装包下载地址][1]

    cd /usr/local/src
    sudo tar -zvxf git-1.8.2.2.tar.gz
    cd git-1.8.2.2

    sudo make prefix=/usr/local/git all
    sudo make prefix=/usr/local/git install

     - 增加软连接

    sudo ln -s /usr/local/git/bin/* /usr/bin/

    git --version  #如果能显示版本号,即表示成功`

    3.在服务器安装gitosis

    sudo yum install python python-setuptools

    cd /usr/local/src

    git clone git://github.com/res0nat0r/gitosis.git

    cd gitosis

    python setup.py install  

    #显示Finished processing dependencies for gitosis==0.2即表示成功

================ 上面是别人的列子 ====================

我们这里使用一台服务器当做git服务器和客户端,操作git饿时候需要切换到git用户
================ git服务器端配置 ====================

服务器:安装git工具【root】/home
    yum install -y python python-setuptools git-core
    git clone git://github.com/res0nat0r/gitosis.git
    cd gitosis
    python setup.py install

    这样提示表示安装成功:
        Using /usr/lib/python2.6/site-packages
        Finished processing dependencies for gitosis==0.2

服务器:新建一个git用户并创建管理git:【root】/home
    useradd -m git
    su - git

服务器:使用客户端ssh生成git管理【root切换git】/home
    ssh-keygen -t rsa
    scp ~/.ssh/id_rsa.pub root@服务器地址:/tmp/
        生成ssh:
            ssh-keygen -t rsa -C "devil@meila.com"

客户端:使用客户端ssh生成git管理【git】/home
    gitosis-init<~/.ssh/id_rsa.pub

    这样会在/home/git下面生成gitosis和repositories两个目录,后者即为存放公共库的目录。确保/home/git/repositories/gitosis-admin.git/hooks/post-update具有执行权限(755)。

客户端:下面需要在开发机克隆gitosis-admin.git项目,它是用来管理所有git项目及用户的。/home/git/data(目录没有则手动创建)
    git clone git@112.124.14.126:gitosis-admin.git  //因为是同一台机器,所以可以用localhost

客户端:为什么这里可以直接通过clone命令克隆项目,就是因为gitosis-init初始化的时候使用了客户端生成的公钥。在gitosis-admin项目下有一个gitosis.conf文件和一个keydir目录。gitosis.conf用来配置git项目和用户,keydir存放用户的公钥,这里的公钥对命名有严格要求,要是 用户名.pub,必须以.pub后缀结尾。gitosis.conf的格式如下:
    [gitosis]

    [group gitosis-admin]
    writable = gitosis-admin
    members = username #对应keydir下有一个 username.pub 公钥文件

客户端:现在可以按照这个格式增加新的项目。
    [gitosis]

    [group gitosis-admin]
    writable = gitosis-admin
    members = username #对应keydir下有一个 username.pub 公钥文件

    [group XXX]
    writable = XXX
    members = user1 user2 ... #多个用户用空格分开

    假如这里新增了一个新的XXX项目:
        同样用新用户的ssh-keygen命令生成公钥和私钥,并把公钥上传到keydir目录下,重命名为user1.pub,更新gigosis-admin项目

客户端:更新项目在CentOS机器上克隆的gitosis-admin项目下执行下面的命令
    git add .
    git commit -a -m "add newuser"
    git push

    完成之后,服务器就已经做好了接受新项目的准备。这个时候服务器端还不会生成new-project.git项目,等PC端push之后会自动生成。

客户端:创建新建的项目目录并添加
    mkdir XXX
    cd XXX
    git init
    touch hello.txt  //创建一个空文件 才能提交成功
    git add hello.txt
    git commit -am '添加新项目'
    git remote add origin git@192.168.1.115:XXX.git
    git push origin master
    git push origin master  //执行两遍

    以上完成后看,XXX/.git/config文件里面是否有,如果没有增加或者执行命令
        [branch "master"]
            remote = origin
            merge = refs/heads/master

         命令:(因此通过git config进行如下配置)
            git config branch.master.remote origin
            git config branch.master.merge refs/heads/master 

个人电脑:克隆项目
    git clone git@192.168.1.115:XXX.git

个人电脑提交代码后服务器同步更新:(添加自动更新)
    文件位置:home/git/repositories/ecshop.git/hooks/post-receive
    #自动更新提交的代码到仓库 start
    cd /home/git/data/ecshop/ #ecshop是服务器客户端管理项目位置
    unset GIT_DIR #cd解决后还是在hoot目录下
    git pull origin master
    #自动更新提交的代码到仓库 end

    说明:
        hook脚本执行了cd之后,继续执行git语句拉取的时候还是在hooks文件夹下,而不是cd的文件路径。
        上面主要是添加了unset GIT_DIR ,git的hooks里面默认有一些环境变量,会导致无论在哪个语句之后执行git命令都会有一个默认的环境路径,既然这样unset 掉默认的GIT环境变量就可以了。

======================== 常见问题 ===========================

首先确定 /home/git/repositories/gitosis-admin.git/hooks/post-update 为可执行即属性为 0755
1. git操作需要输入密码

原因
公密未找到
解决
上传id_pub.rsa到keydir并改为'gitosis帐号.pub'形式,如miao.pub。扩展名.pub不可省略
2. ERROR:gitosis.serve.main:Repository read access denied

原因
gitosis.conf中的members与keydir中的用户名不一致,如gitosis中的members = foo@bar,但keydir中的公密名却叫foo.pub
解决
使keydir的名称与gitosis中members所指的名称一致。
改为members = foo 或 公密名称改为foo@bar.pub

阅读全文

TOP