在工作中git的使用-Forking工作流

这里用github作演示,一般公司内部都有用自己搭建的项目管理平台,比如gitlab等,不管是哪种管理平台,功能上大同小异。

假设公司项目在github上,项目名为GitStudy,可以称其为主库

公司项目-主库.png

进公司后,会分配给你一个账号并给这个项目的相关权限,登录账号后进入项目,可以看到右上角有个Fork的按钮,点击Fork
注意:因为是在github上模拟,所以你的账号下是没有这个项目的,下面提供了项目地址:

可以直接用这个项目做练习,地址:https://github.com/13575294417/JavaWEB

(此前看见的项目是账号为13575294417的用户具有的GitStudy项目,,一般在公司中这个账号由项目经理或者组长进行维护。)

Fork就是克隆的意思,Fork完成后自己账号下也就有了一份和主库一模一样的项目,叫做从库

从库.png

注意左上角,项目名一样,但是项目前的账号发生了变化,原来是13575294417-存放主库的账号,现在是FlyToAnothersBed-存放从库的账号,也就是你的账号。这说明你成功的将主库复制了一份到自己的账号下。

右上角的fork标记也从0变成了1,同时置灰。因为在github上自己不能fork自己的项目。

在fork了项目以后,就要在本地生成秘钥,然后将公钥配置到管理平台上

利用以下命令:

ssh-keygen -t rsa -C "youremail@example.com"

注意要修改成自己的邮箱,回车后有几次停顿,不管他,有停顿就回车,如果有询问(yes/no)就输入yes。执行过程如下:

feng@Feng:~$ ssh-keygen -t rsa -C "邮箱@xxx.com"
Generating public/private rsa key pair.
Enter file in which to save the key (/home/feng/.ssh/id_rsa): 
Created directory '/home/feng/.ssh'.
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /home/feng/.ssh/id_rsa.
Your public key has been saved in /home/feng/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:sOJC/NKmQmokrAAEU9BBTcHn5dmr8y2eSNQGUPrbR9k 邮箱@xxx.com
The key's randomart image is:
+---[RSA 2048]----+
|==+=o....        |
| o. o .o.        |
|.    ooo.o       |
|..    .+oo.  o   |
|o o . . S o.o E  |
|o= + . . +..     |
|B o =   o.. .    |
|+. =   .o..+     |
|...     .++..    |
+----[SHA256]-----+

在本地生成了秘钥后需要在平台上进行配置。
获取公钥,windows在用户目录下的.ssh文件中(自行百度),linux在home目录下的.ssh文件中

feng@Feng:~$ cd ~/.ssh/ ; ll 
总用量 16
drwx------  2 feng feng 4096 11月  2 16:58 ./
drwxr-xr-x 40 feng feng 4096 11月  2 16:57 ../
-rw-------  1 feng feng 1675 11月  2 16:58 id_rsa
-rw-r--r--  1 feng feng  401 11月  2 16:58 id_rsa.pub

打开id_rsa.pub文件,复制里面的内容,粘贴到项目管理平台上:

配置SSH.png

因为是在github上,一个账号做了配置,账号下所有的项目都可以在本地拉取代码,不需重复输入账号密码验证。

有些项目管理平台是以项目为单位,每个项目都需要配置一次ssh。

到这里,公钥就配置完成了。

下一步,拉取代码,做一些常用配置
进入自己账号下的GitStudy项目中,点击 clone or download

clone项目.png

注意,因为配置好了秘钥,所以使用的是SSH协议,而不是HTTPS协议,这种方式无需重复输入账号密码.。

要切换协议点击弹出层的右上角。

将地址复制后,打开git bash或者终端,在指定目录下进行克隆:

git clone 地址

要填写yes的填写yes,执行过程如下:

feng@Feng:~/test$ git clone git@github.com:FlyToAnothersBed/GitStudy.git
正克隆到 'GitStudy'...
The authenticity of host 'github.com (52.74.223.119)' can't be established.
RSA key fingerprint is SHA256:nThbg6kXUpJWGl7E1IGOCspRomTxdCARLviKw6E5SY8.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'github.com,52.74.223.119' (RSA) to the list of known hosts.
remote: Enumerating objects: 3, done.
remote: Total 3 (delta 0), reused 0 (delta 0), pack-reused 3
接收对象中: 100% (3/3), 完成.
处理 delta 中: 100% (3/3), 完成.
检查连接... 完成。

代码拉取后进入项目,做一些配置。

git config --global user.name "你的名字"
git config --global user.email "你的邮箱地址"

执行过程如下:

feng@Feng:~/test$ cd GitStudy/
feng@Feng:~/test/GitStudy$ git config --global user.name "你的名字"
feng@Feng:~/test/GitStudy$ git config --global user.email "你的邮箱地址"

可以查看下配置是否成功:

git config user.name
git config user.email
feng@Feng:~/test/GitStudy$ git config user.name
周伯通
feng@Feng:~/test/GitStudy$ git config user.email
周伯通@139.com

需要配置两个远程地址。

在clone项目的时候,git会自动帮我们生成一个名字叫做origin的远程地址,这个地址就是我们克隆的地址。

用命令查看一下:

git remote -v 
feng@Feng:~/test/GitStudy$ git remote -v 
origin  git@github.com:FlyToAnothersBed/GitStudy.git (fetch)
origin  git@github.com:FlyToAnothersBed/GitStudy.git (push)

v是verbose,冗余的意思,就是查看冗余的信息、详细的信息

还需要配置主库的项目地址,也就是我们前面13575294417账号下的项目地址:

git remote add 项目名称 项目地址

项目名称随便取,一般叫做upstream,地址用的SSH协议

git remote add upstream git@github.com:13575294417/GitStudy.git

再查看下有几个地址:

feng@Feng:~/test/GitStudy$ git remote -v 
origin  git@github.com:FlyToAnothersBed/GitStudy.git (fetch)
origin  git@github.com:FlyToAnothersBed/GitStudy.git (push)
upstream    git@github.com:13575294417/GitStudy.git (fetch)
upstream    git@github.com:13575294417/GitStudy.git (push)

这样所有的配置就做完了,准备开发。

拉下代码后默认处于master分支上,切换分支

git checkout -b 分支名

这是个组合命令,以当前分支为模板,新建一个相同的分支并切换到该分支。

feng@Feng:~/test/GitStudy$ git checkout -b dev
切换到一个新分支 'dev

看一下目前所有分支:

git branch
feng@Feng:~/test/GitStudy$ git branch
* dev
  master

前面的*代表所处的分支。

一般来说,一次版本的开发迭代需要一个分支,一个漏洞的修复需要一个分支,只要是做一个独立的功能就需要一个分支。

但是不管有多少个分支,都必须保留一个分支!

这个分支叫master也好,叫其它名称也好;唯一的要求就是,commit的次数少于或者等于主库的主分支。

这个分支是作为模板的存在!

假设你有多个分支,但是每个分支都在同时进行着自己未完成的工作。

比如A分支在开发新的功能,相较于主库的主分支,多提交了几个commit,还差一部分功能需要在下一个commit中体现;

而B分支又在修复漏洞,也只进行了一半,相对于主库主分支也多了几个commit,同样不能贸然往上推;

如果,又接到一个任务!
但此时所有的分支或多或少都领先主库主分支几个commit,如果以这些分支为模板,新建的分支就夹带了未完成功能的部分commit。

当这个任务分支完成后往上推,被主库主分支所合并。但因为夹带着未完成功能,往往就会报错。

所以必须保留一个commit次数少于或者等于主库主分支的模板分支。
commit次数少于主库主分支没关系,我们可以在推送代码之前,更新自己的代码,以保证自己的本地中不落下主库主分支中的任何一次commit。

现在,假设我们在dev分支上进行开发,master分支作为模板分支。
模拟一个功能的多次commit,先看下目前的commit日志:

git log
feng@Feng:~/test/GitStudy$ git log
commit 26e1f93190e90c61fc06adebb6563d2e1c1b59c0
Author: 13575294417 <37165012+13575294417@users.noreply.github.com>
Date:   Fri Nov 2 18:54:56 2018 +0800

    Initial commit

因为项目是fork的,所以会显示项目之前的commit信息。当你的代码推上去并被合并到了主库主分支,那么当其他新来的同事第一次拉取项目时,也会看见你提交的commit信息。

feng@Feng:~/test/GitStudy$ ls
README.md

目前项目中只有一个README文件,看下其内容:

feng@Feng:~/test/GitStudy$ cat README.md 
# GitStudy

只有一行 “# GitStudy”
在文件最后添加一行文字"商品SKU组合实现--后端代码实现",并提交一次commit

feng@Feng:~/test/GitStudy$ cat README.md 
# GitStudy
商品SKU组合实现--后端代码实现

feng@Feng:~/test/GitStudy$ git status 
位于分支 dev
尚未暂存以备提交的变更:
  (使用 "git add <文件>..." 更新要提交的内容)
  (使用 "git checkout -- <文件>..." 丢弃工作区的改动)

    修改:     README.md

修改尚未加入提交(使用 "git add" 和/或 "git commit -a")

feng@Feng:~/test/GitStudy$ git add README.md 

feng@Feng:~/test/GitStudy$ git commit README.md -m "商品SKU组合实现--后端代码实现"
[dev 7c10939] 商品SKU组合实现--后端代码实现
 1 file changed, 2 insertions(+), 1 deletion(-)

理解工作区、暂存区、本地版本库、远程版本库的概念。

git会标红工作区和暂存区不同的文件,标绿暂存区和本地版本库不同的文件。(这里因为使用Markdown语法所以颜色不一致)

本地版本库信息和暂存区信息被记录在电脑项目文件下的隐藏目录.git目录中。

而工作区指的是自己电脑上的项目文件夹(在自己电脑的磁盘上)。

远程版本库在github上。

上面使用add命令,将README文件中的变化从工作区中添加到了暂存区,暂存区记录了这个变化,此时工作区和暂存区保持了一致,所以不再标红。
如果这个时候再次使用git status命令查看,会发现原本标红的文件变成了标绿。这是因为暂存区同步了工作区中的变化,但是又和本地版本库产生了差异,差异被记录下来,所以对变化的文件进行了标绿。

可以使用git add将变化的文件一个一个添加到暂存区中,也可以使用通配符的方式一次性添加:

git add .

或者

git add READ*

所有变化的文件都添加到暂存区后,我们需要提交一次commit,并进行备注。这个操作会将暂存区中的变化以commit的形式记录到本地版本库中。

git commit -m "备注"

m是comment的简写,注释的意思,这个时候再看看项目的commit日志

feng@Feng:~/test/GitStudy$ git log 
commit 7c1093940f00ee3d116cebe7222dc7b8efd3d742
Author: 周伯通 <周伯通@139.com>
Date:   Sun Nov 4 21:51:04 2018 +0800

    商品SKU组合实现--后端代码实现

commit 26e1f93190e90c61fc06adebb6563d2e1c1b59c0
Author: 13575294417 <37165012+13575294417@users.noreply.github.com>
Date:   Fri Nov 2 18:54:56 2018 +0800

    Initial commit

可以看到,最上边保留了提交记录,包括commit的id、作者邮箱、日期以及提交的备注。
再多添加一次提交:

feng@Feng:~/test/GitStudy$ cat README.md 
# GitStudy
商品SKU组合实现--后端代码实现
商品SKU组合实现--前段代码实现

feng@Feng:~/test/GitStudy$ git status 
位于分支 dev
尚未暂存以备提交的变更:
  (使用 "git add <文件>..." 更新要提交的内容)
  (使用 "git checkout -- <文件>..." 丢弃工作区的改动)

    修改:     README.md

修改尚未加入提交(使用 "git add" 和/或 "git commit -a")

feng@Feng:~/test/GitStudy$ git add README.md 

feng@Feng:~/test/GitStudy$ git status 
位于分支 dev
要提交的变更:
  (使用 "git reset HEAD <文件>..." 以取消暂存)

    修改:     README.md

feng@Feng:~/test/GitStudy$ git commit README.md -m "商品SKU组合实现--前段代码实现"
[dev e1990fe] 商品SKU组合实现--前段代码实现
 1 file changed, 1 insertion(+)

feng@Feng:~/test/GitStudy$ git status 
位于分支 dev
无文件要提交,干净的工作区

那么这个时候功能完成了:

feng@Feng:~/test/GitStudy$ git log 
commit e1990fe20e4502ba897e060d52c7273be24eedeb
Author: 周伯通 <周伯通@139.com>
Date:   Mon Nov 5 10:55:26 2018 +0800

    商品SKU组合实现--前段代码实现

commit 7c1093940f00ee3d116cebe7222dc7b8efd3d742
Author: 周伯通 <周伯通@139.com>
Date:   Sun Nov 4 21:51:04 2018 +0800

    商品SKU组合实现--后端代码实现

commit 26e1f93190e90c61fc06adebb6563d2e1c1b59c0
Author: 13575294417 <37165012+13575294417@users.noreply.github.com>
Date:   Fri Nov 2 18:54:56 2018 +0800

    Initial commit

准备push代码!

在此之前,需要先向upstream地址上拉取更新。因为在开发的过程中,可能已经有同事提交了代码,并被合并到了主库主分支中。

当在本地dev分支上做了拉取合并的操作,那么代码推送上去后,commit数一定是包含主库主分支的所有commit,不会落下任何一段代码,合并到主库主分支时也不会产生任何冲突(如果真有冲突,在本地拉取代码、合并更新时就会出现,并且必须解决了才能够上推代码)。

但是如果没有更新代码,直接将代码推送到远程,那么在项目管理人员合并代码到主库主分支时,因为存在不同的commit,管理平台会自动对不同的commit进行合并形成一个新的commit,如果此时存在冲突,合并操作将不能进行!

所以,项目差异性的合并、冲突的解决,必须在自己本地就完成,推送上去的commit应该要包含主库主分支中的所有commit!

现在,为了模拟其他同事也提交了代码并被管理员合并到了主库主分支中,直接在github的主库账号(不是你的账号)下做一次提交。

主库master分支commit数.png

提交备注为"Update README.md"

在本地开始拉取代码:

git fetch 地址 分支名称
feng@Feng:~/test/GitStudy$ git fetch upstream master
Warning: Permanently added the RSA host key for IP address '13.250.177.223' to the list of known hosts.
remote: Enumerating objects: 5, done.
remote: Counting objects: 100% (5/5), done.
remote: Total 3 (delta 0), reused 0 (delta 0), pack-reused 0
展开对象中: 100% (3/3), 完成.
来自 github.com:13575294417/GitStudy
 * branch            master     -> FETCH_HEAD
 * [新分支]          master     -> upstream/master

upstream对应着主库地址,这个命令就是拉取主库master分支中的更新到自己的本地版本库中,但是还未与本地代码进行合并。这个命令也可以不填写主库分支名称:

git fetch upstream

这个操作是将主库中所有分支的commit信息都更新到自己的本地版本库。
没有必要这样做,主库上可能有很多历史分支没有删掉,一起拉取到本地版本库没有任何意义。

拿到最新信息后,就可以与本地代码合并了。

合并时注意自己所处的分支,在哪个分支上进行合并操作,就是将更新信息合并到当前分支。在dev分支上开发,就在dev上进行合并。

git merge 地址/分支名称
feng@Feng:~/test/GitStudy$ git merge upstream/master
自动合并 README.md
冲突(内容):合并冲突于 README.md
自动合并失败,修正冲突然后提交修正的结果。

将upstream的master分支上的最新代码合并到dev分支上。

因为在github上修改了同一文件,所以产生了冲突。

这里说明一下,因为只用一个文件做演示,所以没有进入自带的编辑器进行自动合并操作。

window使用的git bash软件,进入vi编辑器。

linux系统应该是进入nano编辑器。

弹出一个陌生的页面后不要慌,vi编辑器按ESC切到命令行模式,再按冒号" : "进入底行模式,输入" !wq "保存编辑器中内容后退出。

而nano编辑器直接按 ctrl + x 不修改变动退出。有yes回车yes。

这个是nano编辑器情况:

nano编辑器.png

不管是哪种编辑器,如没必要不要动里面的内容,那里面写的是自动合并后新生成commit的备注信息,方便以后追溯。

现在来解决冲突。

feng@Feng:~/test/GitStudy$ git status
位于分支 dev
您有尚未合并的路径。
  (解决冲突并运行 "git commit")

未合并的路径:
  (使用 "git add <文件>..." 标记解决方案)

    双方修改:   README.md

修改尚未加入提交(使用 "git add" 和/或 "git commit -a")

上面说着未合并,为什么未合并呢?因为有冲突。
所以需要解决冲突,然后手动提交合并的commit。

可能你的提示信息和这的不一样(git会尝试进行自动合并,合并到一半才发现冲突,这种情况下提示不一样),但是所有产生冲突的文件都会标红显示到终端上,你就需要进入文件一个一个解决冲突,然后再重新全部add到暂存区中,提交一次合并的commit。

冲突.png

干掉<<<<< HEAD 、===== 、 >>>>> upstream/master
上面是本地的代码,用HEAD标记,下面是远程upstream/master的代码,用同样的
名称标记,中间用 ==== 分割。

改代码的时候去你的开发软件上去改,这里只是做演示。真正的代码冲突非常繁杂错乱,还是要有语法高亮显示比较好。

解决冲突后:

解决冲突.png

然后作一次提交

feng@Feng:~/test/GitStudy$ git status 
位于分支 dev
您有尚未合并的路径。
  (解决冲突并运行 "git commit")

未合并的路径:
  (使用 "git add <文件>..." 标记解决方案)

    双方修改:   README.md

修改尚未加入提交(使用 "git add" 和/或 "git commit -a")


feng@Feng:~/test/GitStudy$ git add README.md 
feng@Feng:~/test/GitStudy$ git commit -m "解决冲突"
[dev 56c8893] 解决冲突


feng@Feng:~/test/GitStudy$ git status 
位于分支 dev
无文件要提交,干净的工作区


feng@Feng:~/test/GitStudy$ git log
commit 56c8893faf505080214fc6e2529ff1803030b11a
Merge: e1990fe 12073e1
Author: 周伯通 <周伯通@139.com>
Date:   Mon Nov 5 12:35:55 2018 +0800

    解决冲突

commit 12073e1979392197468b00c5c628e2d775660b5b
Author: 13575294417 <37165012+13575294417@users.noreply.github.com>
Date:   Mon Nov 5 11:32:23 2018 +0800

    Update README.md

commit e1990fe20e4502ba897e060d52c7273be24eedeb
Author: 周伯通 <周伯通@139.com>
Date:   Mon Nov 5 10:55:26 2018 +0800

    商品SKU组合实现--前段代码实现

commit 7c1093940f00ee3d116cebe7222dc7b8efd3d742
Author: 周伯通 <周伯通@139.com>
Date:   Sun Nov 4 21:51:04 2018 +0800

    商品SKU组合实现--后端代码实现

commit 26e1f93190e90c61fc06adebb6563d2e1c1b59c0
Author: 13575294417 <37165012+13575294417@users.noreply.github.com>
Date:   Fri Nov 2 18:54:56 2018 +0800

    Initial commit

从commit日志中可以看到,现在本地版本库中的commit,已经包含了主库主分支的commit,再将代码推到自己的远程版本库,然后项目管理员合并代码,就不会产生冲突了。

git push 地址  要推送的本地分支:推动到哪个远程分支
feng@Feng:~/test/GitStudy$ git push origin dev:v1.0.0
Warning: Permanently added the RSA host key for IP address '52.74.223.119' to the list of known hosts.
对象计数中: 12, 完成.
Delta compression using up to 4 threads.
压缩对象中: 100% (7/7), 完成.
写入对象中: 100% (12/12), 1.49 KiB | 0 bytes/s, 完成.
Total 12 (delta 2), reused 0 (delta 0)
remote: Resolving deltas: 100% (2/2), done.
remote: 
remote: Create a pull request for 'v1.0.0' on GitHub by visiting:
remote:      https://github.com/FlyToAnothersBed/GitStudy/pull/new/v1.0.0
remote: 
To git@github.com:FlyToAnothersBed/GitStudy.git
 * [new branch]      dev -> v1.0.0

注意,一般来说,在forking工作流里面,是不能直接将代码推送到主库主分支中。
一是没有这个权限,推也会推送失败;二是这样也不安全。

代码需要经过审核才能合并到主库主分支,所以应该先推送到自己账号下的项目上(从库)。

在这里,从库地址对应着origin(自动生成的名称)。
所以地址填写origin。

后面一段命令是将dev分支推送到从库origin分支v1.0.0上,如果没有v1.0.0分支就自动创建一个。

当然,也可以继续使用dev这个名字:

feng@Feng:~/test/GitStudy$ git push origin dev
Total 0 (delta 0), reused 0 (delta 0)
remote: 
remote: Create a pull request for 'dev' on GitHub by visiting:
remote:      https://github.com/FlyToAnothersBed/GitStudy/pull/new/dev
remote: 
To git@github.com:FlyToAnothersBed/GitStudy.git
 * [new branch]      dev -> dev

将dev分支推送到从库origin上。

前一种推送方式一般用来给分支改名,可能在本地起名比较随意,不符合公司分支的命名规范,那么在推送本地代码到远程从库时,就有机会更改掉本地的分支名称。在管理员合并从库分支代码的时候,记录就不会显示得那么难看了。

当然,这个分支改名操作还有更多的用法,不一一细说了。

前面推送了两次,去从库上看看:

从库分支.png

虽然在本地只有一个dev分支,但是通过别名的方式,可以创建多个不同名称的从库分支,将v1.0.0分支合并到主库主分支上,点击右侧的New pull request按钮,发起合并请求。

Pull Request.png

根据小箭头的指示方向,将FlyToAnothersBed/GitStudy项目的v1.0.0分支,发送一个合并请求,到13575294417/GitStudy项目master分支上(可以改分支),在下面填写好这次开发的功能标题,"v1.0.0_SKU组合功能",也可以在标题下面描述详细的信息。

代码管理平台还提供了比对的功能,新增行标绿,删除行标红:

代码比对.png

点击”Create pull request"发送请求。

等待审核.png

在主库账号下,Pull request标签中,就有了一个要求合并的请求。
当管理员审核代码后,就会点击Merge pull request按钮,合并你的代码。

合并到主库.png

到这里,这次版本的开发也就完成了。

合并完成.png

commit已经合并到了主库的主分支中。
(那个“后端代码实现”的commit,作者名字其实应该是周伯通,因为我操作问题,一开始名字没有设置上,所以这里显示的就是账号的名字,为避免误会,上面的git命令我都手动改成了周伯通```)

开发时常见问题

如果有东西要修改,但是已经发起了Pull request了怎么办?

让管理员先不要合并代码,在自己本地修改后提交一个commit,再往自己从库分支推,此时不需要重新发送一次Pull Request,之前创建的Pull Request会自动更新。

开发中,和其他同事可能要共用某段代码,比如他设计的类,我这个模块需要调用。但是在他合并到主库之前,我是没有办法测试的,那么该怎么办?

可以先在各自的从库中开放对方的开发权限,保证能拉取他的更新,然后添加他从库的地址。在他设计好类后,他只需要将代码推送到自己从库,而我具有他从库项目的权限,能够拉取代码,就能不经过主库拿到他的代码了,反之他要使用我的代码,也是一样。

最后,git stash 这个命令也是非常的好用,开发时通常都要修改配置文件,如数据库地址,改成本地环境先在本地测试,测试完成push业务代码前又要改回来。非常的麻烦,特别下次开发又要重新配置,那么可以这样做:

feng@Feng:~/test/GitStudy$ git status 
位于分支 dev
尚未暂存以备提交的变更:
  (使用 "git add <文件>..." 更新要提交的内容)
  (使用 "git checkout -- <文件>..." 丢弃工作区的改动)

    修改:     jdbc.properties

修改尚未加入提交(使用 "git add" 和/或 "git commit -a")

feng@Feng:~/test/GitStudy$ git stash save "保存配置文件变化"
Saved working directory and index state On dev: 保存配置文件变化
HEAD 现在位于 bff79e8 配置文件


feng@Feng:~/test/GitStudy$ git status 
位于分支 dev
无文件要提交,干净的工作区


feng@Feng:~/test/GitStudy$ git stash list 
stash@{0}: On dev: 保存配置文件变化


feng@Feng:~/test/GitStudy$ git stash pop stash@{0}
位于分支 dev
尚未暂存以备提交的变更:
  (使用 "git add <文件>..." 更新要提交的内容)
  (使用 "git checkout -- <文件>..." 丢弃工作区的改动)

    修改:     jdbc.properties

修改尚未加入提交(使用 "git add" 和/或 "git commit -a")
丢弃了 stash@{0} (cd856a0c17e909bcb54a4d81122317f8020f9af4)

在拉取代码之前先把配置文件的修改保存到git的某个空间中,在代码push上去后再将保存的修改释放出来。这样就不需要频繁的操作了。

参考
完全不知道命令怎么用的先看下下面的文章,回过头来再看这篇会有更深刻的理解。
GIT基础概念:https://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000/

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 160,881评论 4 368
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 68,052评论 1 301
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 110,598评论 0 250
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,407评论 0 217
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,823评论 3 294
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,872评论 1 224
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 32,037评论 2 317
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,778评论 0 204
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,505评论 1 247
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,745评论 2 253
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,233评论 1 264
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,568评论 3 260
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,231评论 3 241
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,141评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,939评论 0 201
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,954评论 2 283
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,784评论 2 275