• gogs的使用


    gogs

    https://gogs.io   # go语言开发的git服务器;

    https://www.percona.com/downloads/   #mysql咨询和软件包装,比mysql性能强

    linux_amd64.tar.gz   #gogs0.11.4

    Percona-Server-5.5.45-37.4-r042e02b-el6-x86_64-bundle.tar

    ]# tar xf Percona-Server-5.5.45-37.4-r042e02b-el6-x86_64-bundle.tar

    ]# tar xf linux_amd64.tar.gz

    ]# ls

    gogs                                                       Percona-Server-devel-55-5.5.45-rel37.4.el6.x86_64.rpm

    gogs_0_11_4_linux_amd64.tar.gz                             Percona-Server-server-55-5.5.45-rel37.4.el6.x86_64.rpm

    Percona-Server-5.5.45-37.4-r042e02b-el6-x86_64-bundle.tar  Percona-Server-shared-55-5.5.45-rel37.4.el6.x86_64.rpm

    Percona-Server-55-debuginfo-5.5.45-rel37.4.el6.x86_64.rpm  Percona-Server-test-55-5.5.45-rel37.4.el6.x86_64.rpm

    Percona-Server-client-55-5.5.45-rel37.4.el6.x86_64.rpm

    ]# yum -y install Percona-Server-shared-55-5.5.45-rel37.4.el6.x86_64.rpm Percona-Server-server-55-5.5.45-rel37.4.el6.x86_64.rpm Percona-Server-client-55-5.5.45-rel37.4.el6.x86_64.rpm   #有先后顺序,shared要在前面

    注:

    Error: mysql-server conflicts with Percona-Server-server-55-5.5.45-rel37.4.el6.x86_64

    Error: mysql conflicts with Percona-Server-client-55-5.5.45-rel37.4.el6.x86_64

    如有以上报错,卸载mysql即可,yum remove mysql-server mysql

    ]# /etc/init.d/mysql start

    Starting MySQL (Percona Server)..                          [  OK  ]

    ]# ss -tanl | grep :3306

    LISTEN     0      50                        *:3306                     *:*    

    ]# /usr/bin/mysql_secure_installation

    ……

    ]# mysql -uroot -p

    Enter password:

    mysql> show databases;

    +--------------------+

    | Database           |

    +--------------------+

    | information_schema |

    | log_db             |

    | mysql              |

    | tarena             |

    | web02              |

    | web03              |

    | web09              |

    +--------------------+

    7 rows in set (0.04 sec)

    ]# useradd git

    ]# id git

    uid=506(git) gid=506(git) groups=506(git)

    ]# tar xf linux_amd64.tar.gz

    ]# cd gogs

    ]# vim scripts/mysql.sql   # utf8mb4,该字符集在mysql5.5以下版本不支持

    ]# mysql -uroot -p < scripts/mysql.sql   #必须要在解压的根路径下执行该脚本

    ]# mysql -uroot -prootqazwsx

    mysql> show databases;

    +--------------------+

    | Database           |

    +--------------------+

    | information_schema |

    | gogs               |

    | log_db             |

    | mysql              |

    | tarena             |

    | web02              |

    | web03              |

    | web09              |

    +--------------------+

    8 rows in set (0.00 sec)

    mysql> GRANT ALL ON gogs.* TO 'gogs'@'%' IDENTIFIED BY 'gogs';

    Query OK, 0 rows affected (0.00 sec)

    mysql> FLUSH PRIVILEGES;

    Query OK, 0 rows affected (0.00 sec)

    mysql> select User,Password,Host from user;

    +------+-------------------------------------------+-----------+

    | User | Password                                  | Host      |

    +------+-------------------------------------------+-----------+

    | root | *247FDDD1F94735215EEDBA224C4434C291D64319 | localhost |

    | root | *247FDDD1F94735215EEDBA224C4434C291D64319 | 127.0.0.1 |

    | gogs | *461C3A96BAEF66E327658B3AFF86F8D71BEE3F99 | %         |

    +------+-------------------------------------------+-----------+

    3 rows in set (0.00 sec)

    https://gogs.io/docs/advanced/configuration_cheat_sheet.html   #配置文件手册

    通用配置:

    APP_NAME,应用名称,可改为组织或公司名;

    RUN_USER,运行应用的用户名称,建议使用git,如果在个人pc上运行gogs,需改为系统用户名称,如果没有正确设置这个值,可能导致应用崩溃;

    server服务器配置:

    HTTP_ADDR,应用http监听地址;

    HTTP_PORT,应用http监听端口;

    DOMAIN,服务器域名,会影响ssh clone地址;

    ROOT_URL = %(PROTOCOL)s://%(DOMAIN)s:%(HTTP_PORT)s/,公开的完整url路径;

    repository仓库:

    ROOT,用户仓库存储根目录,必须为绝对路径,默认为~/<user name>/gogs-repositories;

    database数据库:

    DB_TYPE,数据库类型,可以是mysql/postgres/mssql/sqlite3;

    HOST,数据库主机地址与端口;

    NAME,库名;

    security安全:

    INSTALL_LOCK,用于指示是否允许访问安装页面(该页面可设置管理员账号),非常重要;

    SECURITY_KEY,全局的加密密钥,务必修改该值确保服务器安全(会在每次安装时自动生成随机字符串);

    ]# mkdir -pv custom/conf/   #默认配置在conf/app.ini,该文件从v0.6.0开始被嵌入到二进制中,在不允许修改默认配置的情况下,只要创建custom/conf/app.ini自定义配置文件就可心

    mkdir: created directory `custom'

    mkdir: created directory `custom/conf/'

    ]# vim custom/conf/app.ini

    APP_NAME = magedu

    RUN_USER = git

    RUN_MODE = dev   #dev开发者模式,鉴于性能和其它考虑建议使用prod模式

    [server]

    HTTP_ADDR = 0.0.0.0

    HTTP_PORT = 3000

    [database]

    DB_TYPE = mysql

    HOST = 127.0.0.1:3306

    NAME = gogs

    USER = gogs

    PASSWORD = gogs

    [security]

    INSTALL_LOCK = false

    SECRET_KEY = www.magedu.com.python.git:gogs

    ]# ./gogs web   #普通启动,另守护进程scripts/init/centos/gogs

    ]# cp -r gogs/ /home/git/

    ]# cd gogs

    ]# cp scripts/init/centos/gogs /etc/init.d/

    ]# chmod +x /etc/init.d/gogs

    ]# chkconfig --add gogs

    ]# chkconfig --list gogs

    gogs              0:off 1:off 2:on 3:on 4:on 5:on 6:off

    ]# chown -R git.git /home/git/

    ]# chown git.git /etc/init.d/gogs

    ]# /etc/init.d/gogs start   #本例使用此种方式启动,若切为git用户执行报错为Starting Gogs: runuser: cannot set groups: Operation not permitted

    http://10.113.129.2:3000/install

       1.jpg

    数据库用户密码;

    2.jpg

    域名,10.113.129.2;

    应用URL,http://10.113.129.2:3000/;

    立即安装;

    3.jpg

    马上注册,要注册一个用户,注册的第一个用户直接成为管理员账户,ID=1;

    4.jpg

    jowin,jowin@gogs.com,jowin,创建账户;

    注:admin账户不能创建,默认保留;

    5.jpg

    jowin/jowin,登录;

    创建第二个账户,chai/chai;

    6.jpg

    mysql> use gogs;

    mysql> select id,name,email from user;

    +----+-------+----------------+

    | id | name  | email          |

    +----+-------+----------------+

    |  1 | jowin | jowin@gogs.com |

    |  2 | chai  | chai@gogs.com  |

    +----+-------+----------------+

    2 rows in set (0.00 sec)

    7.jpg

    创建新的仓库,可见性(私有),.gitignore,授权许可,创建仓库;

    如果要公开,需指明“授权许可”,GPL严苛,宽松的apache、mit等;

    8.jpg

    9.jpg

    SSH,私服用;

    解决gogs打开网页慢:

    禁用gravatar服务,使用本地头像;

    方式一:

    gogs]# vim custom/conf/app.ini

    [picture]

    DISABLE_GRAVATAR        = true

    ENABLE_FEDERATED_AVATAR = true

    ]# /etc/init.d/gogs restart

    Shutting down Gogs:                                        [  OK  ]

    Starting Gogs:                                             [  OK  ]

    方式二:

    在install的安装界面,禁用Gravatar服务;

    git

    由来:

    linux内核代码需要版本管理工具维护代码;

    2002年开始,使用的是bitMover公司的BitKeeper(商用软件),与linux社区崇尚的自由软件相悖;

    2005年,Andrew Trigdgell对BitKeeper的协议进行逆向工程,BitKeeper作者决定收回无偿使用权,磋商无果,linus又找不到合适的版本管理工具,决定自行开发分布式版本管理工具;一个月后,linux内核代码被git接管;

    2008年,基于web使用git进行版本控制的软件托管服务的网站github上线;

    2016年5月9日,11年后,BitKeeper开源,发布在了github上;

    ]# yum -y install git

    ]# git --version

    git version 1.7.1

    概念:

    10.jpg

    remote,远程版本库,网络上的另一个版本库,可以和本地库交互;私服;

    repository,仓库、版本库,git初始化后,会在当前目录生成一个.git目录,这就是版本库;

    workspace,工作空间、工作区,.git所在的目录就是工作区,一般是项目的根目录;写源码的地方,代码的编辑环境,有.git目录;

    index,索引,介于工作区和版本库之间,暂存修改的;索引库,待提交,可理解为缓存,临时的区域;

    remote--pull-->workspace

    remote--pull|fetch-->repository

    pull和push不对应:

    pull,远程私服到本地的repository和workspace都有作用;

    push,仅本地的repository到远程私服;

    push和fetch是对应的;

    操作:

    ]$ git init   #初始化一个版本库,多了.git目录,不要随便动,这个目录一般是项目的根目录,这个路径以后归git管

    Initialized empty Git repository in /home/python/magedu/projects/cmdb/.git/

    ]$ vim index.html

    <h1>test</h1>

    ]$ git add index.html   #添加文件,单个文件添加,这一步是把文件的当前变化增加到索引中,也就是以后这个文件需版本库来跟踪管理,注意这步不是提交,没有添加进来git就不关心,此时文件还可继续修改,还可添加新的被跟踪文件,一定要add才能把这些改变加入到索引中

    ]$ git add .   #添加文件,批量添加,点表示当前目录

    ]$ git status   #查看状态,Untracked file列出未跟踪的文件

    # On branch master

    #

    # Initial commit

    #

    # Changes to be committed:

    #   (use "git rm --cached <file>..." to unstage)

    ……

    file status lifecycle:

    11.jpg

    git的文件分类:

    tracked,追踪的,已经加入版本库的文件;

    untracked,未追踪的,未加入到版本库的文件;

    ignored,忽略的,git不再关注的文件,如一些临时文件;.gitignore文件中,目录以/结尾,行起始的!是取反;

    py的忽略文件模板:

    https://github.com/github/gitignore/blob/master/Python.gitignore

    其它语言的忽略文件模板:

    https://github.com/github/gitignore/

    ]$ vim .gitignore

    *.ipynb   #notebook

    __pycache__/

    .*   #点开头的文件

    ]$ vim index.html

    <h1>test duplicate</h1>

    ]$ git status

    ……

    # Changed but not updated:

    #   (use "git add <file>..." to update what will be committed)

    #   (use "git checkout -- <file>..." to discard changes in working directory)

    #

    #       modified:   index.html

    ]$ git add .

    ]$ git commit -m 'first commit'   #提交代码,-m <msg>填写本次日志消息,必须写,写的明明白白清清楚楚,可中文,工作中程序员应该对每一次提交写明做了什么改动

    [master (root-commit) 3ff2c45] first commit

     134 files changed, 5131 insertions(+), 0 deletions(-)

    ……

    ]$ git status   #自最近commit成功后无变化

    # On branch master

    nothing to commit (working directory clean)

    git的提交,分两步:

    暂存变更,add作用是把新文件或文件新的改动添加到一个暂存区stage(index),即加入到index中;

    提交变更,commit提交的是暂存区的改动,而不是物理文件目前的改动(workspace中的文件更改),提交到当前分支,默认是master分支

    $ git commit index.html -m 'second commit'   #两步合一步,$git commit -a -m '...',-a,--all,把所有追踪的文件的改动自动暂存再commit

    注:

    此处两步提交与分布式的两阶段提交不同;

    ]$ vim example.html

    <h1>example</h1>

    ]$ git commit --amend   #增补,如第一次提交后,忘记加入1个文件,将此次改动提交到上一次(第1次提交的)状态

    [master 8c9565b] first commit

     135 files changed, 5132 insertions(+), 0 deletions(-)

    ……

    ]$ git log   #每一次commit都有一个ID与之绑定,不重复的ID

    commit 8c9565b77da25c4be6c9b9fdbc2f13a93897d007

    Author: chaizaowen <chaizaowen@ane56.com>

    Date:   Fri Jul 13 15:23:52 2018 +0800

        first commit

    ]$ git log 8c9565b   #7位ID即可,若前7位区分不出可多几位

    commit 8c9565b77da25c4be6c9b9fdbc2f13a93897d007

    Author: chaizaowen <chaizaowen@ane56.com>

    Date:   Fri Jul 13 15:23:52 2018 +0800

        first commit

    ]$ git log HEAD   #HEAD类似指针,指代当前分支最后一次commit;HEAD^指代上一次提交;HEAD^^指代上上一次提交;HEAD~n上n次提交

    commit 8c9565b77da25c4be6c9b9fdbc2f13a93897d007

    Author: chaizaowen <chaizaowen@ane56.com>

    Date:   Fri Jul 13 15:23:52 2018 +0800

        first commit

    ]$ vim example.html

    <h1>example duplicate</h1>

    ]$ git diff   #查看各种差异

    diff --git a/example.html b/example.html

    index 57b8eef..70946fa 100644

    --- a/example.html

    +++ b/example.html

    @@ -1 +1 @@

    -<h1>example</h1>

    +<h1>example duplicate</h1>

    ]$ git add example.html

    ]$ git diff --cached

    diff --git a/example.html b/example.html

    index 57b8eef..70946fa 100644

    --- a/example.html

    +++ b/example.html

    @@ -1 +1 @@

    -<h1>example</h1>

    +<h1>example duplicate</h1>

    注:

    HEAD类似指针,指代当前分支最后一次commit;

    HEAD^指代上一次提交;

    HEAD^^指代上上一次提交;

    HEAD~n上n次提交

    查看各种差异:

    #git diff   #查看被跟踪文件未暂存的修改,比较暂存区和工作区;

    #git diff --cached   #查看被跟踪文件暂存的修改,比较暂存区和上一次commit的差异;

    #git diff HEAD   #查看被跟踪文件,比较工作区和上一次commit的差异,HEAD指代最后一次commit;

    检出和重置:

    #git checkout   #列出暂存区可被检出的文件;

    #git checkout file   #从暂存区检出文件到工作区,就是覆盖工作区文件,可指代检出的文件,但不清除stage;用于在workspace中改的不好,把暂存区的文件覆盖到工作区重新编辑;

    #git checkout commit file   #检出某个commit的指定文件到暂存区和工作区;

    #git checkout .   #检出暂存区的所有文件到工作区;

    #git reset   #列出将被reset的文件;

    #git reset file   #重置文件的暂存区,和上一次commit一致,工作区不影响;

    #git reset --hard   #硬重置,重置暂存区和工作区,与上一次commit保持一致,谨慎使用;

    注:

    checkout关注的是workspace,从暂存区(index)或版本库(repository,commit)到workspace;

    #git reflog   #显示commit的信息,只要HEAD发生变化,就可在这里看到;

    #git reset commit   #重置当前分支的HEAD为指定commit,同时重置暂存区,但工作区不变;

    #git reset --hard [commit]   #重置当前分支的HEAD为指定commit,同时重置暂存区和工作区,与指定commit一致;

    #git reset --keep [commit]   #重置当前HEAD为指定commit,但保持暂存区和工作区不变,HEAD指针在动;

    移动和删除:

    #git mv src dst   #改名,直接把改名的改动放入暂存区;

    #git rm file   #会同时在版本库和工作区中删除文件,真删除,谨慎操作;

    #git rm --cached file   #将文件从暂存转成未暂存,从版本库中删除,但不删除工作目录的该文件,即文件恢复成不追踪的状态;

    注:以上都算是改动,必须commit才算真改动;

    push到服务器:

    用http协议push到远程:

    ]$ git config --global user.name 'chai'   #生成用户级别的文件~/.gitconfig

    ]$ git config --global user.email 'chaizaowen@ane56.com'

    ]$ cat ~/.gitconfig   #配置此文件是个好的习惯

    [user]

            name = chai

            email = chaizaowen@ane56.com

    [color]

            ui = true

    [http]

            postBuffer = 524288000

    ]$ git remote add origin http://chai@10.113.129.2:3000/chai/cmdb.git   #远程版本库名origin,这是个习惯用法,将建立origin和后面url的映射,这些信息保存在.git/config文件的[remote "origin"]段中,.git/config是版本库级别配置文件,这里的设置具有最高优先级;origin名字可改,一般不改,约定是这个名字

    ]$ cat .git/config

    [core]

            repositoryformatversion = 0

            filemode = true

            bare = false

            logallrefupdates = true

    [remote "origin"]

            url = http://chai@10.113.129.2:3000/chai/cmdb.git

            fetch = +refs/heads/*:refs/remotes/origin/*

    ]$ git push -u origin master   #此步会有输入密码的对话框,使用http得有账号密码,第一次远程推送时加-u,update,可将很多信息更新上去,之后再提交就不加-u,直接$git push origin master甚至$git push即可

    Counting objects: 149, done.

    Delta compression using up to 8 threads.

    Compressing objects: 100% (128/128), done.

    Writing objects: 100% (149/149), 46.05 KiB, done.

    Total 149 (delta 7), reused 0 (delta 0)

    To http://chai@10.113.129.2:3000/chai/cmdb.git

     * [new branch]      master -> master

    Branch master set up to track remote branch master from origin.

    注:

    $git push -u origin master有如下报错

    No protocol specified

    (gnome-ssh-askpass:3373): Gtk-WARNING **: cannot open display: :1.0

    切至root下执行#xhost +,授予其他用户访问当前屏幕的权限,即可打开输入密码的对话框;

    ]$ vim about.html

    ]$ git add about.html

    ]$ git commit -m 'add about.html'

    [master 43f8e47] add about.html

     1 files changed, 1 insertions(+), 0 deletions(-)

     create mode 100644 about.html

    ]$ git push   #需输密码

    Counting objects: 4, done.

    Delta compression using up to 8 threads.

    Compressing objects: 100% (2/2), done.

    Writing objects: 100% (3/3), 276 bytes, done.

    Total 3 (delta 1), reused 0 (delta 0)

    To http://chai@10.113.129.2:3000/chai/cmdb.git

       d973a21..43f8e47  master -> master

    12.jpg

    13.jpg

    仓库设置,“该仓库为私有的”前勾去掉,更新设置,再次web页面打开,刷新;

    私有的仓库,必须登录,只能用户自己看,为了方便,修改为公有的;

    14.jpg

    点ID号,可看出改了哪些内容;

    用ssh协议push到远程:

    这个操作实在window中的任意想要clone到的一个文件,右键单击git Bash Here,然后再输入的命令

    ]$ cd

    ]$ ssh-keygen -t rsa -C 'chai@ane56.com'   #如果在win下,用gitbash,原命令行没有ssh-keygen命令

    ]$ cat .ssh/id_rsa.pub   #将此内容放至gogs web页的“增加SSH密钥”

    15.jpg

    用户设置,SSH密钥,增加密钥;

    ]$ pwd

    /home/python

    ]$ mkdir my_gogs

    ]$ git clone git@10.113.129.2:chai/cmdb.git

    Initialized empty Git repository in /home/python/my_gogs/cmdb/.git/

    The authenticity of host '10.113.129.2 (10.113.129.2)' can't be established.

    RSA key fingerprint is 5c:a7:44:96:bc:20:5a:dc:51:62:76:9b:42:1c:8b:c0.

    Are you sure you want to continue connecting (yes/no)? yes

    Warning: Permanently added '10.113.129.2' (RSA) to the list of known hosts.

    remote: Counting objects: 152, done.

    remote: Compressing objects: 100% (123/123), done.

    remote: Total 152 (delta 8), reused 148 (delta 7)

    Receiving objects: 100% (152/152), 46.27 KiB, done.

    Resolving deltas: 100% (8/8), done.

    [python@tmsapp my_gogs]$ ll -h

    total 4.0K

    drwxr-xr-x 10 python python 4.0K Jul 13 17:27 cmdb

    pycharm中用git:

    在win上做好SSH;

    gogs上SSH密钥,粘贴id_rsa.pub里内容;

    16.jpg

    File-->Close Project-->Checkout from Version Control,选Git;

    17.jpg

    Git Repository URL,Parent Directory,Directory Name,Test,Clone;

    18.jpg

    New-->Python File,app.py,Yes,编辑该文件;

    19.jpg

    20.jpg

    VCS-->Git-->Add,同gitbash里$git add app.py;

    21.jpg

    VCS-->Commit

    22.jpg

    23.jpg

    VCS-->Git-->Push-->Push;

    24.jpg

    25.jpg

    私服查看;

    26.jpg

    stash存储:

    #git stash   #暂时存储最后一次提交后的变化,放到栈中;

    #git stash list

    #git stash pop   #从栈中取出刚才保存的变化,并合并;

    应用场景:

    开发中,当前手中的工作没有完成,需要中断当前工作来完成其它请求,如修复bug,已完成的工作内容提交不合适,可能还需要大的调整,但是紧急请求又不能不做,就需要stash存储未完成的工作(上次提交后做的修改);

    例(在pycharm中操作):

    当前正在写dispatcher.py,发现之前提交的app.py有问题,当前正在开发的半成品如何处理?用stash;

    27.jpg

    VCS-->Git-->Stash Changes,Message(edit dispatcher)-->Create Stash,执行后,工作区回到了上次提交的样子; 

    28.jpg

    29.jpg

    修改app.py,提交

    30.jpg

    31.jpg

    VCS-->Git-->UnStash Changes-->Apply Stash

    32.jpg

    33.jpg

    例(命令行下操作):

    34.jpg

    35.jpg

    branch分支:

    多人协作一起开发,开发项目中不同的独立的功能,这些功能可能需要好几天才能完成,又或者定制版本,往往需要一个不同的定制需求;

    代码中至少有一个分支,称主干分支或主分支master,默认都在主分支上开发;

    36.jpg

    图中圆圈,即节点,表示每一次提交;

    项目往往是并行多人开发的,都在主分支上克隆,然后修改提交,那么主分支就会存在大量的冲突,甚至有一些不完善代码提交,主分支就乱如麻,不可维护了;

    再次,如果一次提交后,需要发布一个版本,这个版本以后独立维护、开发,而主分支还需要继续发展,怎么办?引入分支;

    分支名:

    在版本库中必须唯一;

    不能以-开头;

    可用/开头,但不能以/结尾,被它分割的名称不能以.开头;

    不能使用两个连续的.,如..;

    不能包含任何空白字符,git的特殊符号;

    37.jpg

    38.jpg

    创建分支:

    需要指明从什么分支上创建什么名字的分支;

    39.jpg

    上图,均在master分支上,三种颜色重叠表示与私服同步且在主分支上;

    Version Control-->右键某一次的commit-->New Branch,New Branch name(dev),勾选Checkout branch(检出分支就立即切换到dev分支);

    40.jpg

    41.jpg

    修改app.py,commit and push

    42.jpg

    43.jpg

    在私服上查看;

    44.jpg

    dev开发完成,需将功能合并到master,切换回到master,检出master;

    Version Control-->右键最近一次的master上的提交(origin&master)-->Branch 'master'-->Checkout

    45.jpg

    VCS-->git-->Merge Changes,Branches to merge中选dev,Strategy中选No fast forward-->Merge

    46.jpg

    47.jpg

    48.jpg

    目前的合并,只是本地,再push到私服

    49.jpg

    50.jpg

    fast forward、no fast forward:

    51.jpg

    ff,默认,合并后为一条线;

    no fast forward,有交叉;

    gitflow工作流:

    不同公司,不同的项目规模,不同的管理水平有着不同git工作流方式;

    最佳实践,使用git一般至少2个分支,master和develop;

    master,生产环境都来主干分支上拿数据部署,也可以使用钩子自动完成;

    develop,开发分支,开发人员都是检出这个分支开发;

    win下Git GUI

    52.jpg

    注意:

    函数不可以分前后,一般一个类交给某个人开发,除非这个类很大,由不同的人开发不同的方法;

    最多的是模块化开发;

    要有设计文档,如不同功能的类不可以同名;

    大的项目最多拉3、4条分支;不建议拉多个分支;真正在开发时一般两条线,master&dev;

    拉分支应由具有相应权限的人开;

    开发人员都从dev分支上拉取,不能在master上拉取;达到某个里程碑再合并到master上;

    master分支用于运维人员发布拉取;

    commit时要保证是有效代码,不可以在分支上reset等回退之类的操作;

    要会拉分支-->合并-->commit&push;

    刚开始开发时要clone,clone会把.git目录带回来;不可以初始化,如果重新git init,git log中没内容;

     ©著作权归作者所有:来自51CTO博客作者chaijowin的原创作品,如需转载,请注明出处,否则将追究法律责任

  • 相关阅读:
    Linux源码Kconfig文件语法分析
    从0移植uboot (一) _配置分析
    ARM汇编与C混合编程
    ARM汇编程序结构
    ARMGNU伪指令
    Linux tcp黏包解决方案
    Linux 服务器模型小结
    Linux IPC udp/tcp/UNIX域 socket编程
    Linux IPC socket 广播,组播
    Linux I/O多路复用
  • 原文地址:https://www.cnblogs.com/mapone/p/12556066.html
Copyright © 2020-2023  润新知