git编译安装与常用命令

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u010861514/article/details/52174136
git编译安装与常用命令
=========================================
一:编译安装与设置

1.1:简介
    github官网地址(下载源码包):https://github.com/git/git.git
    git 在 windows mac等系统下载:https://git-scm.com/downloads
    
1.2:依赖关系(解决常见的依赖关系)
    ~]# yum -y install gcc openssl openssl-devel curl curl-devel unzip perl perl-devel expat expat-devel zlib zlib-devel asciidoc xmlto gettext-devel openssh-clients

    ~]# yum -y install openssh-clients
    # ssh-keygen 出现 -bash: ssh: command not found 的解决办法


1.3:编译安装
    方式一:
        ~]# make prefix=/usr/local/git all doc
        ~]# make prefix=/usr/local/git install  install-doc install-html

    方式二:
        ~]# yum -y install autoconf
        ~]# make configure   或者    autoconf
        # 备注:生成 configure 文件
        ~]# ./configure --prefix=/usr/local/git 
        ~]# make all doc
        ~]# make install install-doc install-html

    方式三:
    ~]# yum -y install git      # 安装 git
    ~]# yum -y install git-all.noarch      # 安装 git 所有的包,非必须


1.4:环境配置
    ~]# echo 'export PATH=/usr/local/git/bin:$PATH' > /etc/profile.d/git.sh
    ~]# . /etc/profile.d/git.sh
    ~]# git --version    # 查看版本


1.5:man 文档配置
    ~]# vim /etc/man_db.conf
    MANDATORY_MANPATH           /usr/local/git/share/man

    查看帮助
        格式一:
            ~]# git help init
        格式二:
            ~]# man git-init


1.6:ssh用户,权限,服务器身份认证,初始化仓库 与 拉取仓库
    1:添加用户:
        ~]# useradd git

    2:权限(用户组合用户均为git):
        /home/git/.ssh      权限为:700
        /home/git/.ssh/authorized_keys  权限为:600
            ~]# mkdir /home/git/.ssh
            ~]# chmod 700 /home/git/.ssh
            ~]# touch /home/git/.ssh/authorized_keys
            ~]# chmod 600 /home/git/.ssh/authorized_keys
            ~]# chown -R git:git /home/git/.ssh 

        # 注意: id_rsa 权限为 600     id_rsa.pub  权限为 644  

    3:服务器身份认证(authorized_keys):
            把本地的公钥 id_rsa.pub 里面的内容加入到 /home/git/.ssh/authorized_keys,一行一个,可以加入多个公钥,git 操作时不再需要密码。

    4:初始化仓库:(结尾为 .git)
            创建空项目
                ~]# cd /home/git     # 进入git家目录
                ~]# git init --bare useryx.git
                    # 例如 git init --bare 仓库名.git

            项目已有内容
            ~]# git init 
                # cd 进入项目进行初始化
            ~]# git clone --bare 目录名 仓库.git
                # 例如:git clone --bare useryx useryx.git
                # 仓库外面执行

    5:修改仓库用户组为 git
            ~]# chown git:git useryx.git

    6:拉取仓库
            ~]# git clone [ssh://]用户名@地址:仓库名.git
                # 例如:git clone [email protected]:useryx.git 或者 家目录下的一个文件内如 git clone [email protected]:/home/git/dir/a.git


1.7:禁止ssh用户登录,可以不用设置。
    ~]# vim /etc/passwd
        # 修改git 用户登录shell
    1:使用linux系统的  /sbin/nologin   不允许登录
        git:x:1001:1001::/home/git:/sbin/nologin
    2:使用git服务 git-shell 的 /usr/local/git/bin/git-shell,which git-shell 查看命令位置。
        git:x:1001:1001::/home/git:/usr/local/git/bin/git-shell



二:客户端初始化配置

2.1:客户端生成公钥与私钥 ssh-keygen(切换至需要生成公钥与私钥的用户)
    ~]# su - git    # 切换至git用户
    ~]# ssh-keygen
        # 使用默认 rsa 算法,2048 长度
    ~]# ssh-keygen -t rsa -b 4096 -C '[email protected]' -P '3a/Jd3v1wq6M1lrAO+Qc4bCHb2W3SynSTg3CT1GS'
        # -t 指定算法
        # -C  添加一个注释
        # -b 指定加密长度,默认是2048,建议为4096
        # -P 使用加密密码串
            ~]# openssl rand -base64 30      #  30 为生成字符串的长度

    # 使用 ssh-keygen 按照提示操作,也可直接回车。


2.2:设置用户名和邮箱
    ~}# git config --global user.name "用户名"
    ~}# git config --global user.email "邮箱@aliyun.com"


2.3:初始化添加文件夹
    1:创建新版本库(正常流程操作)
        git clone [email protected]:useryx.git
        cd useryx
        touch README.md
        git add README.md
        git commit -m "add README"
        git push -u origin master

    2:已存在的文件夹或 Git 仓库
        cd useryx
        git init
        git remote add origin [email protected]:useryx.git
        git add .
        git commit -m '初始化'
        git push -u origin master

2.4:查看默认配置文件
    ~]# git config --list 或者 git config --l

2.5:不更新文件( .gitgmore)
    ~]#  find ./  -name .gitignore
        # 查找 .gitignore 文件
    ~]# find ./ -name .gitignore -delete
        # 删除 .gitignore 文件

    # 不更新的文件或目录放于此文件中


2.6:本地克隆
    ~]# git clone file://root/test /tmp/test
    ~]# git clone test /tmp/test
        # 本地的 git 项目克隆



三:基础操作

3.1:添加文件(add)
    ~]# git add filename
        # 添加某个文件
    ~]# git add .   或者  git add -A
        # 添加当前目录所有文件


3.2:删除文件(rm)
    ~]# rm                              # 删除文件但不会删除索引
    ~]# git rm -f filename      # 未提交需要 -f 删除
    ~]# git rm filename         # 删除文件并删除索引
    ~]# git rm --cached file    # 删除索引,改变为未追踪状态
    ~]# git cat-file -p hash码   # 查看文件内容


3.3:修改文件(mv)
    ~]# mv                                              # 索引添加新文件,原来的索引会保留。提交时会有错误
    ~]# git mv filename newfilename     # 修改文件同时修改索引

3.4:索引文件添加到快照(commit)
    ~]# git commit -m '注释'
    ~]# git commit -am '注释'             # 添加文件并提交注释

3.5:状态
    ~]# git status

3.6:文件追踪
    已追踪的(tracked)
        ~]# git ls-files
    未追踪的(igored)
        ~]# git ls-files -o
    被忽略的(untracked):
        查看文件 .gitignore


3.7:提交与拉取
        ~]# git pull
            # 拉取:从远程获取最新版本到本地,不会自动merge
        ~]# git fetch   
            # 拉取:从远程获取最新版本到本地,会自动merge
        ~]# git push origin master
            # 提交:推送本地到远程主分支,


3.8:日志(log)
    ~]# git log
    ~]# git log --oneline
        # 行显示,短格式
    ~]# git log --graph
        # 树型图
    ~]# git log --pretty=oneline --abbrev-commit

3.9:文件比较不同
    ~]# git diff filename1 filename2
            # 比较文件
    ~]# git diff dev
            # 比较当前分支与主分支

3.9:撤销操作(reset)
    1:git reset –mixed <commit id> <filename>:此为默认方式,它回退到某个版本,只保留源码,回退commit和index信息
    2:git reset –soft <commit id> <filename>:只回退 commit 的信息,保留 index ,如果还要提交,直接commit
    3:git reset –hard <commit id> <filename>:彻底回退到某个版本,本地的源码也会变为上一个版本的内容

    HEAD:当前分支的最近提交
    ORIG_HEAD:合并时,新生成的提交保存于此引用中

    HEAD^   回滚前一次,工作目录不受影响

    ^   回退到上一次
    ~<n>  回到几次,等于连续的 HEAD^

    ~]# git reset --hard ORIG_HEAD      # 提交后回退 commit 之前状态


四:分支
3.1:查看与新建分支
        ~]# git branch --all
        ~]# git branch --list

3.:2:创建与切换分支
        ~]# git branch <branch>                             # 创建分支(基于当前分支)
        ~]# git branch <branch> <hsah码>            # 创建分支(基于指定 commit id 分支)
        ~]# git branch bug/first                                # 创建父目录分支(基于当前分支)
        ~]# git branch bug/first  <hsah码>              # 创建父目录分支(基于指定 commit id 分支)

        ~]# git checkout <branch>                   # 切换分支
        ~]# git checkout -b <branch>              # 创建分支时直接切换

3.3:查看分支以及相关的提交
        ~]# git branch                      # 列出分支
        ~]# git branch --list             # 列出分支
        ~]# git show-branch <branch>     # 显示branch分支详细信息

3.4:删除分支
    ~]# git branch -d <branch>
    ~]# git branch -D <branch>      # 强制删除分支
    ~]# git push origin --delete <branch>  # 删除远程分支
    ~]# git push --delete origin <branch>  # 删除远程分支

3.5:绑定本地分支到远程
    ~]# git push --set-upstream origin dev
        # 本地在 dev 分支上,执行此次操作后在 dev 分支只使用 git push

3.6:比较两个分支差异
    ~]# git diff dev
        # 比较当前分支与 dev 分支的区别

3.5:合并分支
    ~]#  git merge dev
        # 合并 dev 分支到当前分支

3.7:恢复到合并之前
    ~]# git reset --merge    
        # 撤销到合并之前

3.8:查看失败的合并文件信息
        ~]# git ls-files --unmerged
            1:基础版本
            2:我们的版本
            3:他们的版本
        ~]# cat filename(冲突的文件)修改文件内容
            ++<<<<<
            ============
            ++>>>>>>>>>.
        #  修改完成文件后 add 再次提交

3.9:重命名分支
    ~]# git branch -m <branch> <newbranch>   # 重命名本地分支

3.10:推送分支
    ~]# git push origin <branch>  # 推送本地分支到远程


五:打标签
5.1:tag介绍
    git 有 commit,commit号是一串字符不便于查找,而 tag 的作用是更加清晰明了。
    把完整的项目提交到 tag 标签,就可以实现版本的持续发布。

5.2:创建标签
    ~]# git tag <name>

5.3:查看标签
    ~]# git tag
    ~]# git show <tag name>   # 可以查看到commit id

5.4:对 commit id 打标签
    ~]# git tag <tag name> <commit id>
    ~]# git tag -a <tag name> -m "注释信息" <commit id>

5.5:删除标签
    ~]# git tag -d <tagname>        # 本地标签
    ~]# git push origin :refs/tags/<tagname>    # 远程标签

5.6:推送标签
    ~]# git push origin <tagname>  推送指定的
    ~]# git push origin --tags   # 推送全部



六:常见问题解决办法

6.1:git status 查看状态时中文乱码
    git config --global core.quotepath false

6.2:文件权限引起的冲突(文件显示被修改)(低版本git一般会出现此问题)
    git config core.filemode false

猜你喜欢

转载自blog.csdn.net/u010861514/article/details/52174136