• 分布式管理工具git


      别人的总结是别人,自己学习完要有自己的心得体会。

      Git是 分布式 版本控制系统,不管可以管控代码,其他类型的文件也一样可以进行版本控制,很方便多人协作的情况。有点类似与现在的 WPS在线文档 ,是不过WPS是实时的,而Git相当于在线下做完在上传线上,达到同样的效果。

      所谓分布式管理,就是代码的管理不依赖于中心服务器,每台终端都可以是代码服务器,这样极大降低了代码丢失的风险。

    一、Git安装配置

      工欲善其事必先利其器,相对于windows系列的下一步下一步的安装,我们着重看下Ubuntu环境下的Git安装与配置吧。【GitHub示例

    1. Git安装

    ## 哈哈,很简单!
    sudo apt-get install git
    

    2. Git版本库配置

    # 创建仓库repository目录
    mkdir MySpace
    cd MySpace
    touch test.txt
    touch test.doc
    
    
    # 初始化仓库,然后这个仓库下的所有文件都会被git监视
    git init
    ls -ah
    # 将文件添加到暂存区stage
    git add test.txt test.doc  # 或 git add .
    # 将文件提交到仓库,-m 后面是提交的备注信息
    git commit -m "add test.txt file"
    # 上面两步可以合并成一步操作,它会自动跟踪并提交有修改的文件;一般不推荐这种方法,因为它不能将文件添加到git管理里的
    git commit -a "add test.txt file"
    
    
    # 先GitHub推送需要先添加ssh-keygen
    cd ~/.ssh
    ssh-keygen
    cat ~/.ssh/id_rsa.pub
    
    
    # 将仓库里的数据提交到远程仓库(如:GitHub)
    # GitHub中https://github.com/new新建远程仓库
    # 将本地仓库与远程仓库关联
    git remote add origin git@github.com:Crisimple/test_repository.git
    # 把本地库的所有内容推送到远程库上
    git push -u origin master  # 首次向远程仓库推送加-u
    
    
    # 从远程库克隆数据
    git clone git@github.com:crisimple/test_repository.git
    git clone https://github.com/crisimple/test_repository.git      # 速度慢每次推送还得输入口令,不建议使用
    

    二、后悔药

    来自廖大大的博客图片
    GitHub示例

    1. 版本回退

    # 1.版本回退
    # 1.1. 查看提交日志
    git log
    # 简化输出信息
    git log --pretty=oneline
    # 查看每一次的提交记录,即使是回退的也可以查看
    git reflog
    # -----------------------------------------------------------------------
    # 1.2. 回退版本
    # 回退到上一个版本
    git reset --hard HEAD^
    # 回退到指定的版本
    git reset --hard commit_id
    # 撤销到暂存区
    git reset --soft HEAD@{1}
    # 干掉这个修改
    git reset --hard HEAD@{1}  # 或 git reset HEAD~2
    

    2. 工作区

    # 2.1 查看工作区的状态
    git status
    # 2.2 丢弃工作区的文件
    git checkout -- test.txt
    # 2.3 删除文件
    git rm test.txt
    

    三、分支管理

      在多人协作的项目中,为了避免自己开发的代码与其他人产生冲突,拉出一个分支。

      创建一个属于自己的分支,别人看不到,还继续在原来的分支上正常工作,而在自己的分支上干活,先提交就提交,直到开发完毕后,再一次性合并到原来的分支上,这样即安全又不影响别人工作。

    1. 创建与合并分支

      HEAD指向master(也就是当前分支),master指向提交。

    # 创建dev分支,然后切换到dev分支,相当于接下来的两条命令
    git checkout -b dev
    
    git branch dev
    git checkout dev
    
    # 查看当前分支,当前分支前会标一个 * 号
    git branch
    
    # 切换到主分支,这时候查看master分支上是没有任何修改的
    git checkout master
    
    # 将dev分支上的工作成果合并到master上, git merge 用于合并指定分支到当前分支
    git merge dev
    
    # 合并完dev分支,就可以删除dev分支了
    git branch -d dev
    
    # git中更科学的切换分支用 switch
    git switch master
    # 创建并切换到新的分支上
    git switch -c dev
    
    

      因为创建、合并和删除分支非常快,所以Git鼓励你使用分支完成某个任务,合并后再删掉分支,这和直接在master分支上工作效果是一样的,但过程更安全。

    2. BUG分支

      软件开发中,bug就像是家常便饭一样。每个不管都可以通过一个新的临时分支来修复,修复后合并分支,然后将临时分支删除。

    # 创建新的临时分支的时候,看下当前工作区的状态
    git status
    # 如果当前分支dev上的功能还没开发完毕,那么又需要紧急修复bug,可以将dev的修改存储起来
    git stash
    git status
    
    # 确定是在那个分支上修复bug,如果是master分支上修复则从master上创建临时分支
    git checkout master
    git checkout -b issue-101
    
    # 修复bug
    git add modify_bug.py
    git commit -m "fix issue 101"
    
    # 修复完bug切换到master分支,合并bug分支,再删除issue-101分支
    git checkout master
    git merge --no-ff -m "merge bug fix 101" issue-101
    
    # 恢复 dev 分支的工作进度
    git checkout dev
    git status
    # 查看刚存储的开发工作
    git stash list
    # 恢复stash里的内容
    # git stash apply恢复后,stash内容并不删除,通过git stash drop删除
    git stash apply stash@{0}
    git stash drop
    # 或者通过git stash pop 恢复的同时会将stash内容删除
    git stash pop
    
    # cherry-pick命令,将复制一个特定的提交到当前分支
    git cherry-pick commit_id
    

    3. Feature分支

      添加一个新的功能时,为了不把主分支搞乱。没添加一个新功能,最好新建一个feature分支,再上面开发完成后,合并,最后删除该feature分支。

    # 创建并切换至feature分支
    git checkout -b feature-vulcan
    
    # 在feature分支开发
    git add feature_test.py
    git commit -m "add feature vulann"
    
    # 切换到dev,合并分支
    git status
    git checkout dev 
    git merge feature-vulcan
    # 突然间接到说该功能不用添加了
    git branch -D feature-vulcan
    

    4. 多人协作

      以大家共同从GitHub上拉取代码开发合并为例。

    # 推送分支
    git push origin dev
    
    # 抓取分支
    git pull git@github.com:crisimple/crisimple.git
    
    # 本地dev分支上开发,必须创建远程origin的dev分支到本地
    git checkout -b dev origin/dev
    
    # 查看远程库信息,使用git remote -v;
    
    # 本地新建的分支如果不推送到远程,对其他人就是不可见的;
    
    # 从本地推送分支,使用git push origin branch-name,如果推送失败,先用git pull抓取远程的新提交;
    
    # 在本地创建和远程分支对应的分支,使用git checkout -b branch-name origin/branch-name,本地和远程分支的名称最好一致;
    
    # 建立本地分支和远程分支的关联,使用git branch --set-upstream branch-name origin/branch-name;
    
    # 从远程抓取分支,使用git pull,如果有冲突,要先处理冲突。
    

    5. 解决冲突

    四、标签管理

      发布一个版本时,通常先在版本库中打一个标签(tag),这样就唯一确定了打标签时刻的版本。将来无论什么时候,取某个标签的版本就把那个标签使劲儿的历史版本取出来即可。所以标签也是版本库的一个快照,其实它就是指向commit的指针。

      Git有commit,为什么还要引入tag?简化记忆,commit对应id太长,用tag v1.1容易记住且有名字有意义。

    1. 创建标签

    # 切换到要打标签的分支上
    git branch
    git checkout master
    
    # 打一个新标签
    git tag v1.0
    # 查看已打过的所有标签
    git tag
    # 对指定的commit id打标签
    git log --pretty=oneline --abbrev-commit
    git tag v1.1 f53c633
    # 查看标签信息
    git show v1.1
    # 打标签带参数,-a 指定标签名,-m 指定说明文字
    git tag -a v1.2 -m "parameter introduction add"
    

    2. 操作标签

    # 删除标签
    git tag -d v1.1
    # 将某个标签的推送到远程
    git push origin v1.0
    # 一次性推送全部尚未推送到远程的本地标签
    git push origin --tags
    # 删除远程的标签
    git push origin :refs/tags/v1.2
    

    五、自定义Git

    1. 忽略特殊文件

      在git工作区的根目录下创建一个特殊的.gitignore文件,然后把要忽略的文件名填进去,git就会自动忽略这些文件。

    echo "要忽略文件的名称" >> .gitignoer
    
    # 检查忽略规则
    git check-ignore -v app.py
    
    # 强制添加某个文件
    git add -f app.py
    

    2. 配置别名

      简化git的相关命令,可以给原名令起个别名。

    git config --global alias st status
    
    # 配置查看最后一次提交信息
    git config --global alias last 'log -i'
    
    # 加上config是针对当前用户生效,如果不加只针对当前的仓库起作用
    # 当前仓库的配置文件
    cat .git/config
    # 当前用户的配置文件
    cat .gitconfig
    

    六、搭建Git服务器

      搭建一套自己的git代码管理仓库。

    # 安装git
    sudo apt-get install git
    
    # 创建一个git用户,用来运行git服务
    sudo adduser git
    
    # 创建证书登录
    收集所有需要登录的用户的公钥,就是他们自己的id_rsa.pub文件,把所有公钥导入到/home/git/.ssh/authorized_keys文件里,一行一个。
    
    # 初始化仓库
    sudo git init --bare sample.git
    
    # 不让用户直接登录到服务器上去改工作区,并且服务器上的Git仓库通常都以.git结尾。然后,把owner改为git
    sudo chown -R git:git sample.git
    
    # 禁用 shell 登录
    git:x:1001:1001:,,,:/home/git:/usr/bin/git-shell
    
    # 克隆远程仓库
    git clone git@server:/srv/sample.git
    
  • 相关阅读:
    JMeter学习(八)JDBC Request
    linearLayout 和 relativeLayout的属性区别
    Android基础类之BaseAdapter
    Android LayoutInflater详解
    ASP.NET数据库连接字符串的加密与解密
    C#中web.config文件详解
    sealed,new,virtual,abstract与override关键字的区别?
    jQuery $.post $.ajax用法
    2009-04-19 22:40 SQL SERVER游标的讲解
    触发器 (Delete Update)
  • 原文地址:https://www.cnblogs.com/secoder/p/12906375.html
Copyright © 2020-2023  润新知