zoukankan      html  css  js  c++  java
  • Git

    git的官方网站:http://git-scm.com

    Git介绍

    Git是一个开源的分布式版本控制软件,用以有效、高速的处理很小到大的项目版本管理。Git 最初是由Linus Torvalds设计开发的,用于管理Linux内核开发。Git 是根据GNU通用公共许可证版本2的条款分发的自由/免费软件,安装参见:http://git-scm.com/
    Git就是一个用于帮助用户实现版本控制的软件。

    GitHub是一个基于Git的远程文件托管平台。
    Git本身完全可以做到版本控制,但其所有内容以及版本记录都只能保存在本机,如果想要将文件内容以及版本记录同时保存在远程,则需要集合github来使用。

     首先将我们写好的项目建立好,并且下载好git后,使用git管理。

    基础命令

    1、初始化,让git把这个文件管理起来

    git init

    会出现.git文件,如果没有,将设置一下隐藏文件就可以了,正常情况下会是这种情况

    Initialized empty Git repository in D:/python/gitdemo/.git/

    2、查看当前文件夹的状态

    git status

    会显示:

    123456@LAPTOP-M4E1QDHK MINGW64 /d/python/gitdemo (master)
    $ git status
    On branch master
    
    No commits yet
    
    Untracked files:
      (use "git add <file>..." to include in what will be committed)
    
            .idea/
            app01/
            gitdemo/
            manage.py
            templates/
    
    nothing added to commit but untracked files present (use "git add" to track)

    这个时候文件都还没有被管理,所以都是红色的

    3、我们先随便对一个文件进行管理,例如:manage.py

    git  add   manage.py(文件名)     # 就是对当前文件版本控制

    然后在查看一下状态:

    git  status
    123456@LAPTOP-M4E1QDHK MINGW64 /d/python/gitdemo (master)
    $ git status
    On branch master
    
    No commits yet
    
    Changes to be committed:
      (use "git rm --cached <file>..." to unstage)
    
            new file:   manage.py
    
    Untracked files:
      (use "git add <file>..." to include in what will be committed)
    
            .idea/
            app01/
            gitdemo/
            templates/

    此刻,manage.py是已经被管理的文件,颜色从红色变成了绿色。

    4、对当前文件下的所有文件以及子目录进行版本控制

    git  add  .

    在查看,就是所有文件都被管理了:

    123456@LAPTOP-M4E1QDHK MINGW64 /d/python/gitdemo (master)
    $  git add .
    warning: LF will be replaced by CRLF in .idea/gitdemo.iml.
    The file will have its original line endings in your working directory.
    warning: LF will be replaced by CRLF in .idea/misc.xml.
    The file will have its original line endings in your working directory.
    warning: LF will be replaced by CRLF in .idea/modules.xml.
    The file will have its original line endings in your working directory.
    warning: LF will be replaced by CRLF in .idea/workspace.xml.
    The file will have its original line endings in your working directory.
    
    123456@LAPTOP-M4E1QDHK MINGW64 /d/python/gitdemo (master)
    $ git status
    On branch master
    
    No commits yet
    
    Changes to be committed:
      (use "git rm --cached <file>..." to unstage)
    
            new file:   .idea/gitdemo.iml
            new file:   .idea/misc.xml
            new file:   .idea/modules.xml
            new file:   .idea/workspace.xml
            new file:   app01/__init__.py
            new file:   app01/admin.py
            new file:   app01/apps.py
            new file:   app01/migrations/__init__.py
            new file:   app01/models.py
            new file:   app01/tests.py
            new file:   app01/views.py
            new file:   gitdemo/__init__.py
            new file:   gitdemo/__pycache__/__init__.cpython-35.pyc
            new file:   gitdemo/__pycache__/settings.cpython-35.pyc
            new file:   gitdemo/settings.py
            new file:   gitdemo/urls.py
            new file:   gitdemo/wsgi.py
            new file:   manage.py
            new file:   templates/index.html

    5、创建提交记录(版本)

    git  commit -m "详细描述版本信息"
    123456@LAPTOP-M4E1QDHK MINGW64 /d/python/gitdemo (master)
    $ git commit -m '创建第一个版 本'
    [master (root-commit) 72d22fe] 创建第一个版本本
     19 files changed, 504 insertions(+)
     create mode 100644 .idea/gitdemo.iml
     create mode 100644 .idea/misc.xml
     create mode 100644 .idea/modules.xml
     create mode 100644 .idea/workspace.xml
     create mode 100644 app01/__init__.py
     create mode 100644 app01/admin.py
     create mode 100644 app01/apps.py
     create mode 100644 app01/migrations/__init__.py
     create mode 100644 app01/models.py
     create mode 100644 app01/tests.py
     create mode 100644 app01/views.py
     create mode 100644 gitdemo/__init__.py
     create mode 100644 gitdemo/__pycache__/__init__.cpython-35.pyc
     create mode 100644 gitdemo/__pycache__/settings.cpython-35.pyc
     create mode 100644 gitdemo/settings.py
     create mode 100644 gitdemo/urls.py
     create mode 100644 gitdemo/wsgi.py
     create mode 100644 manage.py
     create mode 100644 templates/index.html

    如果在这一步报错了,就是没有写名字,和邮箱。按照所说的步骤来就行了。

    这个时候我们再查看:

    123456@LAPTOP-M4E1QDHK MINGW64 /d/python/gitdemo (master)
    $ git status
    On branch master
    nothing to commit, working tree clean

    已经为空,变成透明的了文件,实际上还是存在的。

    6、查看信息,提交的记录

    git  reflog
    123456@LAPTOP-M4E1QDHK MINGW64 /d/python/gitdemo (master)
    $ git reflog
    72d22fe (HEAD -> master) HEAD@{0}: reset: moving to 72d22fe3836c39ae2a1e0e85e106           a41cc9b24898
    c5cf29d HEAD@{1}: commit: 添加论文检查3功能
    72d22fe (HEAD -> master) HEAD@{2}: commit (initial): 创建第一个版本本

    7、回滚

    git  reset --hard  (版本号)

     8、暂存,用于在开发过程中临时需要修复bug或临时新功能的到来

    stash用于将工作区发生变化的所有文件获取临时存储在“某个地方”,将工作区还原当前版本未操作前的状态;stash还可以将临时存储在“某个地方”的文件再次拿回到工作区。
    
    git stash 作用:帮助我们暂时存储已经开发的一些功能的代码,继续做其他事情。做完之后再回来继续开发。
    git stash pop
    特别的:执行 git stash pop 命令时,可能会遇到冲突,因为在紧急修复bug的代码和通过stash存储在“某个地方”的代码会有重合部分,所以执行 git stash pop 时候就会出现冲突,有冲突解决冲突即可。
    stash相关常用命令:
    
    git stash             将当前工作区所有修改过的内容存储到“某个地方”,将工作区还原到当前版本未修改过的状态
    git stash list        查看“某个地方”存储的所有记录
    git stash clear     清空“某个地方”
    git stash pop       将第一个记录从“某个地方”重新拿到工作区(可能有冲突)
    git stash apply     编号, 将指定编号记录从“某个地方”重新拿到工作区(可能有冲突) 
    git stash drop      编号,删除指定编号的记录

    9、与stash作用相同的是branch

    分支学习:branch称为分支,默认仅有一个名为master的分支。一般开发新功能流程为:开发新功能时会在分支dev上进行,开发完毕后再合并到master分支。
    git  branch dev                # 创建新分支,即:拷贝一份当前所在分支代码到新分支
    git checkout dev               # 切换到dev分支

    分支功能完成后,再合并。合并之前要回到master,在合并

    git checkout master             # 切换回master分支 
    git merge dev                   # 将dev分支内容合并到master分支

    代码:

    123456@LAPTOP-M4E1QDHK MINGW64 /d/python/gitdemo (master)
    $ git branch dev          # 创建分支 拷贝一份当前所在分支代码到新支
    123456@LAPTOP-M4E1QDHK MINGW64 /d/python/gitdemo (master)
    $ git branch              # 查看一下分支
      dev
    * master
    
    123456@LAPTOP-M4E1QDHK MINGW64 /d/python/gitdemo (master)
    $ git checkout dev         # 切换到dev分支
    Switched to branch 'dev'
    
    123456@LAPTOP-M4E1QDHK MINGW64 /d/python/gitdemo (dev)
    $ git add .               # 将修改文件添加到版本库的暂存区
    
    123456@LAPTOP-M4E1QDHK MINGW64 /d/python/gitdemo (dev)
    $ git commit -m "论文修改3.1"    # 将暂存区的内容提交到当前所在分支,即:dev分支
    [dev beb0313] 论文修改3.1
     1 file changed, 1 insertion(+)
    
    123456@LAPTOP-M4E1QDHK MINGW64 /d/python/gitdemo (dev)
    $ git status                # 查看状态
    On branch dev 
    nothing to commit, working tree clean
    
    123456@LAPTOP-M4E1QDHK MINGW64 /d/python/gitdemo (dev)
    $ git checkout master          # 切换到master
    Switched to branch 'master'
    
    123456@LAPTOP-M4E1QDHK MINGW64 /d/python/gitdemo (master)
    $ git status                
    On branch master
    nothing to commit, working tree clean
    
    123456@LAPTOP-M4E1QDHK MINGW64 /d/python/gitdemo (master)
    $ git branch picc
    
    123456@LAPTOP-M4E1QDHK MINGW64 /d/python/gitdemo (master)
    $ git checkout picc
    Switched to branch 'picc'
    
    123456@LAPTOP-M4E1QDHK MINGW64 /d/python/gitdemo (picc)
    $ git add .
    
    123456@LAPTOP-M4E1QDHK MINGW64 /d/python/gitdemo (picc)
    $ git commit -m "修改论文3.1.1"
    [picc 597a7e2] 修改论文3.1.1
     1 file changed, 1 insertion(+), 1 deletion(-)
    
    123456@LAPTOP-M4E1QDHK MINGW64 /d/python/gitdemo (picc)
    $ git checkout master
    Switched to branch 'master'
    
    123456@LAPTOP-M4E1QDHK MINGW64 /d/python/gitdemo (master)
    $ git merge picc          # 合并
    Updating c5cf29d..597a7e2
    Fast-forward
     templates/index.html | 2 +-
     1 file changed, 1 insertion(+), 1 deletion(-)
    
    123456@LAPTOP-M4E1QDHK MINGW64 /d/python/gitdemo (master)
    $ git log
    commit 597a7e216b13825f35a53932c7811fbbf7734187 (HEAD -> master, picc)
    Author: unknown <1079264692@qq.com>
    Date:   Wed Mar 13 11:27:14 2019 +0800
    
        修改论文3.1.1
    
    commit c5cf29d6df4a152d82badeb414c89b2eb6711b28
    Author: unknown <1079264692@qq.com>
    Date:   Mon Mar 11 13:44:59 2019 +0800
    
        添加论文检查3功能
    
    commit 72d22fe3836c39ae2a1e0e85e106a41cc9b24898
    Author: unknown <1079264692@qq.com>
    Date:   Mon Mar 11 13:35:18 2019 +0800
    
        创建第一个版本本
    
    123456@LAPTOP-M4E1QDHK MINGW64 /d/python/gitdemo (master)
    $ git atatus
    git: 'atatus' is not a git command. See 'git --help'.
    
    The most similar command is
            status
    
    123456@LAPTOP-M4E1QDHK MINGW64 /d/python/gitdemo (master)
    $ git status
    On branch master
    nothing to commit, working tree clean
    
    123456@LAPTOP-M4E1QDHK MINGW64 /d/python/gitdemo (master)
    $ git branch -d picc           # 删除这个分支
    Deleted branch picc (was 597a7e2).
    
    123456@LAPTOP-M4E1QDHK MINGW64 /d/python/gitdemo (master)
    $ git branch
      dev
    * master
    
    123456@LAPTOP-M4E1QDHK MINGW64 /d/python/gitdemo (master)
    $ git checkout dev
    Switched to branch 'dev'
    
    123456@LAPTOP-M4E1QDHK MINGW64 /d/python/gitdemo (dev)
    $ git status
    On branch dev
    nothing to commit, working tree clean
    
    123456@LAPTOP-M4E1QDHK MINGW64 /d/python/gitdemo (dev)
    $ git status
    On branch dev
    nothing to commit, working tree clean
    
    123456@LAPTOP-M4E1QDHK MINGW64 /d/python/gitdemo (dev)
    $ git status
    On branch dev
    Changes not staged for commit:
      (use "git add <file>..." to update what will be committed)
      (use "git checkout -- <file>..." to discard changes in working directory)
    
            modified:   templates/index.html
    
    no changes added to commit (use "git add" and/or "git commit -a")
    
    123456@LAPTOP-M4E1QDHK MINGW64 /d/python/gitdemo (dev)
    $ git add .
    
    123456@LAPTOP-M4E1QDHK MINGW64 /d/python/gitdemo (dev)
    $ git commit -m "论文暂时修改完"
    [dev 1ac93af] 论文暂时修改完
     1 file changed, 1 insertion(+)
    
    123456@LAPTOP-M4E1QDHK MINGW64 /d/python/gitdemo (dev)
    $ git checkout master
    Switched to branch 'master'
    
    123456@LAPTOP-M4E1QDHK MINGW64 /d/python/gitdemo (master)
    $ git merge dev
    Auto-merging templates/index.html
    CONFLICT (content): Merge conflict in templates/index.html
    Automatic merge failed; fix conflicts and then commit the result.
    branch相关常用命令:
    
    git branch 分支名称             创建分支
    git checkout 分支名称          切换分支
    git branch -m 分支名称        创建并切换到指定分支
    git branch                          查看所有分支
    git branch -d 分支名称         删除分支
    git merge 分支名称              将指定分支合并到当前分支

    面试题:

    如果代码出现bug,如何解决?

    创建一个bug分支,然后进行bug处理,处理完毕后合并到master分支,然后删除bug分支。最后回到dev分支继续开发。

    最后,我们都写完功能后,如果是在家里边写完的,到公司以后如果没带电脑怎么办?这时候就有了GitHub托管平台。

    GitHub介绍

    GitHub,一个基于Git实现的代码托管的平台,可以将内容以及版本记录在远程也保存一份,这样就不用U盘咯(类似于云盘)。
    PS: 类似GitHub的产品还有许多,如:GitLab、Bitbucket、码云等。

    基于GitHub实现代码托管,需要一下步骤:

    • 注册GitHub
    • 创建仓库,创建完仓库后会有一个URL代指该仓库
    • git可以是用该URL进行向远程推送版本信息或获取版本信息

    在家里,将开发完的功能提交到GitHub

    123456@LAPTOP-M4E1QDHK MINGW64 /d/python/gitdemo (master)
    $ git remote add origin https://github.com/lllmy/gitdemo.git                 # 为地址起一个别名origin
    123456@LAPTOP-M4E1QDHK MINGW64 /d/python/gitdemo (master)
    $ git push origin master                                                     # 将本地master分支内容以及版本信息推送到GitHub 
    Enumerating objects: 42, done.
    Counting objects: 100% (42/42), done.
    Delta compression using up to 4 threads.
    Compressing objects: 100% (35/35), done.
    Writing objects: 100% (42/42), 9.41 KiB | 566.00 KiB/s, done.
    Total 42 (delta 10), reused 0 (delta 0)
    remote: Resolving deltas: 100% (10/10), done.
    To https://github.com/lllmy/gitdemo.git
     * [new branch]      master -> master
    
    123456@LAPTOP-M4E1QDHK MINGW64 /d/python/gitdemo (master)
    $ git branch
      dev
    * master
    
    123456@LAPTOP-M4E1QDHK MINGW64 /d/python/gitdemo (master)
    $ git checkout dev
    Switched to branch 'dev'
    
    123456@LAPTOP-M4E1QDHK MINGW64 /d/python/gitdemo (dev)
    $ git push origin dev                           # 将本地dev分支内容以及版本信息推送到GitHub
    Total 0 (delta 0), reused 0 (delta 0)
    remote:
    remote: Create a pull request for 'dev' on GitHub by visiting:
    remote:      https://github.com/lllmy/gitdemo/pull/new/dev
    remote:
    To https://github.com/lllmy/gitdemo.git
     * [new branch]      dev -> dev
    
    123456@LAPTOP-M4E1QDHK MINGW64 /d/python/gitdemo (dev)
    $ git pull origin dev
    remote: Enumerating objects: 7, done.
    remote: Counting objects: 100% (7/7), done.
    remote: Compressing objects: 100% (1/1), done.
    remote: Total 4 (delta 2), reused 4 (delta 2), pack-reused 0
    Unpacking objects: 100% (4/4), done.
    From https://github.com/lllmy/gitdemo
     * branch            dev        -> FETCH_HEAD
       1ac93af..54efe99  dev        -> origin/dev
    Updating 1ac93af..54efe99
    Fast-forward
     templates/index.html | 1 +
     1 file changed, 1 insertion(+)

    在公司,我们在GitHub上把在家里写的功能代码给拉下来

    123456@LAPTOP-M4E1QDHK MINGW64 /d/python/gggnaa
    $ git clone https://github.com/lllmy/gitdemo.git          # 将项目从GitHub中获取 
    Cloning into 'gitdemo'...
    remote: Enumera ting objects: 42, done.
    remote: Counting objects: 100% (42/42), done.
    remote: Compressing objects: 100% (25/25), done.
    remote: Total 42 (delta 10), reused 42 (delta 10), pack-reused 0
    Unpacking objects: 100% (42/42), done.
    
    123456@LAPTOP-M4E1QDHK MINGW64 /d/python/gggnaa
    $ ls
    gitdemo/
    
    123456@LAPTOP-M4E1QDHK MINGW64 /d/python/gggnaa
    $ cd gitdemo
    
    123456@LAPTOP-M4E1QDHK MINGW64 /d/python/gggnaa/gitdemo (master)
    $ git branch                                          # 默认获取到得只有master分支
    * master
    
    123456@LAPTOP-M4E1QDHK MINGW64 /d/python/gggnaa/gitdemo (master)
    $ git branch dev
    
    123456@LAPTOP-M4E1QDHK MINGW64 /d/python/gggnaa/gitdemo (master)
    $ git checkout dev
    Switched to branch 'dev'
    
    123456@LAPTOP-M4E1QDHK MINGW64 /d/python/gggnaa/gitdemo (dev)
    $ git pull origin dev
    From https://github.com/lllmy/gitdemo
     * branch            dev        -> FETCH_HEAD
    Already up to date.
    
    123456@LAPTOP-M4E1QDHK MINGW64 /d/python/gggnaa/gitdemo (dev)
    $ git status
    On branch dev
    nothing to commit, working tree clean
    
    123456@LAPTOP-M4E1QDHK MINGW64 /d/python/gggnaa/gitdemo (dev)
    $ git status
    On branch dev
    Changes not staged for commit:
      (use "git add <file>..." to update what will be committed)
      (use "git checkout -- <file>..." to discard changes in working directory)
    
            modified:   templates/index.html
    
    no changes added to commit (use "git add" and/or "git commit -a")
    
    123456@LAPTOP-M4E1QDHK MINGW64 /d/python/gggnaa/gitdemo (dev)
    $ git add .
    
    123456@LAPTOP-M4E1QDHK MINGW64 /d/python/gggnaa/gitdemo (dev)
    $ git commit -m "会员功能1/3"
    [dev 54efe99] 会员功能1/3
     1 file changed, 1 insertion(+)
    
    123456@LAPTOP-M4E1QDHK MINGW64 /d/python/gggnaa/gitdemo (dev)
    $ git push origin dev
    Enumerating objects: 7, done.
    Counting objects: 100% (7/7), done.
    Delta compression using up to 4 threads.
    Compressing objects: 100% (3/3), done.
    Writing objects: 100% (4/4), 368 bytes | 184.00 KiB/s, done.
    Total 4 (delta 2), reused 0 (delta 0)
    remote: Resolving deltas: 100% (2/2), completed with 2 local objects.
    To https://github.com/lllmy/gitdemo.git
       1ac93af..54efe99  dev -> dev
    123456@LAPTOP-M4E1QDHK MINGW64 /d/python/gitdemo (dev)
    $ ls
    2.py  app01/  gitdemo/  manage.py*  templates/
    
    123456@LAPTOP-M4E1QDHK MINGW64 /d/python/gitdemo (dev)
    $ git fetch origin dev                          # 从GitHub仓库获取dev分支最新内容到版本库的分支
    remote: Enumerating objects: 8, done.
    remote: Counting objects: 100% (8/8), done.
    remote: Compressing objects: 100% (3/3), done.
    remote: Total 6 (delta 3), reused 6 (delta 3), pack-reused 0
    Unpacking objects: 100% (6/6), done.
    From https://github.com/lllmy/gitdemo
     * branch            dev        -> FETCH_HEAD
       d4cfd11..7f07a9e  dev        -> origin/dev
    
    123456@LAPTOP-M4E1QDHK MINGW64 /d/python/gitdemo (dev)
    $ git merge origin/dev                            # 将版本库的分支内容合并到工作区
    Updating d4cfd11..7f07a9e
    Fast-forward
     1.py | 0
     3.py | 0
     2 files changed, 0 insertions(+), 0 deletions(-)
     create mode 100644 1.py
     create mode 100644 3.py
    
    123456@LAPTOP-M4E1QDHK MINGW64 /d/python/gitdemo (dev)
    $ ls
    1.py  2.py  3.py  app01/  gitdemo/  manage.py*  templates/
    长此以往,将Git和GitHub结合使用做到避免电脑损坏造成数据丢失以及多地开发的问题,
    上文执行过程中执行 【git pull origin 分支】命令等同于【git fetch origin 分支】+ 【git merge origin/分支】,
    并且在执行过程中可能会出现冲突,原因是由于本地代码和获取的最新代码有重合部分,那么就需要自己手动解决冲突然后再继续开发。

    面试题:

    git  rebase的作用?

    我在公司写代码忘记提交了,在家继续开发功能,在拉取代码后提交,用git fetch和gitmerge提交的时候会有一个分叉记录,我们吧git merge换成git rebase会保持提交记录的整洁。
    
    以斜杠“/”开头表示目录;
    
      以星号“*”通配多个字符;
    
      以问号“?”通配单个字符
    
      以方括号“[]”包含单个字符的匹配列表;
    
      以叹号“!”表示不忽略(跟踪)匹配到的文件或目录;
    
    .gitignore
    在git中如果想忽略掉某个文件,不让这个文件提交到版本库中,可以使用修改 .gitignore 文件的方法。这个文件每一行保存了一个匹配的规则例如:
    
    # 此为注释 – 将被 Git 忽略
    
                *.a       # 忽略所有 .a 结尾的文件
                !lib.a    # 但 lib.a 除外
                /TODO     # 仅仅忽略项目根目录下的 TODO 文件,不包括 subdir/TODO
                build/    # 忽略 build/ 目录下的所有文件
    
                doc/*.txt # 会忽略 doc/notes.txt 但不包括 doc/server/arch.txt
    
        这样设置了以后 所有的 .pyc 文件都不会添加到版本库中去。
    
        另外 git 提供了一个全局的 .gitignore,你可以在你的用户目录下创建 ~/.gitignoreglobal 文件,以同样的规则来划定哪些文件是不需要版本控制的。
    
    需要执行 git config --global core.excludesfile ~/.gitignoreglobal来使得它生效。
    
    其他的一些过滤条件
    
        * ?:代表任意的一个字符
        * *:代表任意数目的字符
        * {!ab}:必须不是此类型
        * {ab,bb,cx}:代表ab,bb,cx中任一类型即可
        * [abc]:代表a,b,c中任一字符即可
    
        * [ ^abc]:代表必须不是a,b,c中任一字符
    
        由于git不会加入空目录,所以下面做法会导致tmp不会存在 tmp/*             //忽略tmp文件夹所有文件
    
        改下方法,在tmp下也加一个.gitignore,内容为
                            *
                            !.gitignore
        还有一种情况,就是已经commit了,再加入gitignore是无效的,所以需要删除下缓存
                            git rm -r --cached ignore_file
    
     
    
    注意: .gitignore只能忽略那些原来没有被track的文件,如果某些文件已经被纳入了版本管理中,则修改.gitignore是无效的。
    
        正确的做法是在每个clone下来的仓库中手动设置不要检查特定文件的更改情况。
        git update-index --assume-unchanged PATH    在PATH处输入要忽略的文件。
    
        另外 git 还提供了另一种 exclude 的方式来做同样的事情,不同的是 .gitignore 这个文件本身会提交到版本库中去。用来保存的是公共的需要排除的文件。
    而 .git
    /info/exclude 这里设置的则是你自己本地需要排除的文件。 他不会影响到其他人。也不会提交到版本库中去。 .gitignore 还有个有意思的小功能, 一个空的 .gitignore 文件 可以当作是一个 placeholder 。当你需要为项目创建一个空的 log 目录时, 这就变的很有用。
    你可以创建一个 log 目录 在里面放置一个空的 .gitignore 文件。这样当你 clone 这个 repo 的时候 git 会自动的创建好一个空的 log 目录了。
    git tag -a v1.0 -m '版本介绍'        本地创建Tag
        git show v1.0                       查看
        git tags -n                         查看本地Tag
        git tag -l 'v1.4.2.*'               查看本地Tag,模糊匹配
        git tag -d v1.0                     删除Tag
        git push origin :refs/tags/v0.2     更新远程tag
        git checkout v.10                   切换tag
        git fetch origin tag V1.2
    
        git push origin  --tags
        git pull origin  --tags
        
        git clone -b v0.1
    
    版本相关
    先说一下相同点,二者都是基于web的Git仓库,在很大程度上GitLab是仿照GitHub来做的,
    它们都提供了分享开源项目的平台,为开发团队提供了存储、分享、发布和合作开发项目的中心化云存储的场所。 GitHub作为开源代码库及版本控制系统,拥有超过900万的开发者用户,目前仍然是最火的开源项目托管系统。GitHub同时提供公共仓库和私有仓库,但如果要使用私有仓库,是需要付费的。 而GitLab解决了这个问题,你可以在上面创建私人的免费仓库。 GitLab让开发团队对他们的代码仓库拥有更多的控制,相比于GitHub,它有不少的特色: 允许免费设置仓库权限;允许用户选择分享一个project的部分代码;允许用户设置project的获取权限,进一步的提升安全性;
    可以设置获取到团队整体的改进进度;通过innersourcing让不在权限范围内的人访问不到该资源。 从代码私有性方面来看,有时公司并不希望员工获取到全部的代码,这个时候GitLab无疑是更好的选择。但对于开源项目而言,GitHub依然是代码托管的首选。

     连接:https://www.cnblogs.com/ZN-225/p/10734947.html

  • 相关阅读:
    WindRiver workbench 做操步骤
    发现pci设备
    pci驱动与硬件通信
    推荐一款pascal 语言的web 开发工具
    Basic4android v2.70 发布
    如何制作 Basic4android 的库文件
    GoGoGo,哦哦哦,我获奖了..微软的双肩笔记本包~~
    爽,买到返程票了!
    去掉微软认证的WINDOWS盗版标志
    大四才醒悟太迟了吗
  • 原文地址:https://www.cnblogs.com/hnlmy/p/10510865.html
Copyright © 2011-2022 走看看