<!-- START doctoc generated TOC please keep comment here to allow auto update -->
<!-- DON'T EDIT THIS SECTION, INSTEAD RE-RUN doctoc TO UPDATE -->
**Table of Contents**  *generated with [DocToc](https://github.com/thlorenz/doctoc)*

- [签出正式开发代码，同步修改，提交](#%E7%AD%BE%E5%87%BA%E6%AD%A3%E5%BC%8F%E5%BC%80%E5%8F%91%E4%BB%A3%E7%A0%81%E5%90%8C%E6%AD%A5%E4%BF%AE%E6%94%B9%E6%8F%90%E4%BA%A4)
  - [检查新增分组和代码](#%E6%A3%80%E6%9F%A5%E6%96%B0%E5%A2%9E%E5%88%86%E7%BB%84%E5%92%8C%E4%BB%A3%E7%A0%81)
  - [签出Web4，ConfCenter，3.0服务，CityWebService](#%E7%AD%BE%E5%87%BAweb4confcenter30%E6%9C%8D%E5%8A%A1citywebservice)
  - [创建自己的开发分支](#%E5%88%9B%E5%BB%BA%E8%87%AA%E5%B7%B1%E7%9A%84%E5%BC%80%E5%8F%91%E5%88%86%E6%94%AF)
  - [同步修改](#%E5%90%8C%E6%AD%A5%E4%BF%AE%E6%94%B9)
  - [添加`.gitignore`文件](#%E6%B7%BB%E5%8A%A0gitignore%E6%96%87%E4%BB%B6)
  - [提交修改](#%E6%8F%90%E4%BA%A4%E4%BF%AE%E6%94%B9)
  - [同步远程分支](#%E5%90%8C%E6%AD%A5%E8%BF%9C%E7%A8%8B%E5%88%86%E6%94%AF)
  - [合并主分支（develop分支）](#%E5%90%88%E5%B9%B6%E4%B8%BB%E5%88%86%E6%94%AFdevelop%E5%88%86%E6%94%AF)

<!-- END doctoc generated TOC please keep comment here to allow auto update -->

# 签出正式开发代码，同步修改，提交

edit-by：王进波 2018.08.06


## 检查新增分组和代码

打开Gitlab网页：http://civgit.vicp.net:8880  进入CivDevelop分组


## 签出Web4，ConfCenter，3.0服务，CityWebService

用git命令或者gui工具签出代码，这四个项目要放在同一级目录下

开发人员只需要迁出develop分支，我们今后所有开发任务都以develop分支为主线，master作为稳定归档分支，不允许开发人员提交更新和合并请求。

检查和设置符号链接设置，管理员权限启动命令行，cmd，或Powershell，或Git Bash

``` shell
git config --global core.symlinks	#返回true是为正确，返回false ，或返回为空，则需要手动设置允许符号链接
git config --global core.symlinks true	#手动设置允许符号链接
```

下面的操作都用管理员权限启动的命令行中执行，

检出Web4前端代码

```shell
git clone -b develop https://civgit.vicp.net:8443/CivDevelope/Web4.git	#检出develop分支
cd Web4
git branch	#查看本地当前分支，是develop
git branch -a	#查看本地和远程的全部分支
```



检出ConfCenter，ConfCenter只有Master分支，master分支默认受保护，需要Mainter权限的用户来push提交到远程仓库

```shell
git clone https://civgit.vicp.net:8443/CivDevelope/ConfCenter.git	
cd ConfCenter
git branch	
git branch -a	
```



检出3.0服务代码

```shell
git clone https://civgit.vicp.net:8443/CivDevelope/CityWebFW.git		#检出develop分支
cd CityWebFW
git branch	#查看本地当前分支，是develop
git branch -a	#查看本地和远程的全部分支
```



检出CityWebService后端代码

```shell
git clone -b develop https://civgit.vicp.net:8443/CivDevelope/CityWebService.git	#检出develop分支
cd CityWebService 
git branch	#查看本地当前分支，是develop
git branch -a	#查看本地和远程的全部分支
```



## 创建自己的开发分支

```shell
cd CityWebService	#cd到自己的working copy
git branch	#查看当前本地分支
git checkout -b dev-yourname	#创建自己名字命名的本地开发分支，命名格式为dev—名字全拼
git branch	#现在可以看到我们已经在自己的开发分支上了
```

```SHELL
cd Web4		#cd到Web4的workingcopy
git branch	#查看working copy当前所在分支
git checkout -b dev-yourname	#创建自己名字命名的本地开发分支，命名格式为dev-名称全拼
git branch	#检查当前所在分支
```

其他两个项目，不需要在上面协作开发的就不需要创建分支

所以大多数时候，我们本地只有两个分支，一个是develop分支，一个是dev-yourname分支，我们在dev-yourname分支上完成开发，将代码提交后，从dev-yourname分支merge到develop分支上去，便完成了一次短暂的分支开发生命周期。



注意：新入职同事不需要执行[`同步操作`](#%E5%90%8C%E6%AD%A5%E4%BF%AE%E6%94%B9)的步骤了，但是可以了解一下过程

## 同步修改

同步修改只做一次，只在我们第一次从SVN代码工程切换到Git工程的时候，用于将SVN上未提交的修改同步到Git工程中使用，同步过一次以后，就不需要再次同步了。

新同事直接从Git开始开发的不需要看这步。

操作步骤见这里：[BeyondCompare 同步代码](FromSVNToGit/BeyondCompareSync.md)

如此，最终我们就完成了将本地开发环境迁移到Git的过程了，建议大家暂时保留原有的开发环境，后续开发我们就可以在Git环境上完成了

上面示例的是CityWebService的过程，Web4的过程相同。



## 添加`.gitignore`文件

   我们在用svn的时候会将不需要添加到版本控制的文件类型通过ignore列表排除掉，在git里面也有相应的机制，需要我们去手动添加和编辑`.gitignore`文件。

   `.gitignore`文件一般位于我们Git工作目录的根目录中，也可以存在于子目录下，作用域也是层级嵌套的，每个`.gitignore`文件对它当前所在目录及其子目录内的文件有效，如果子目录中存在`.gitignore`文件且与外部冲突，则以内部为准。

   我在Gitlab Server中已经添加了`.gitignore`文件，大家clone下来就会有。不需要额外添加了。

   

## 提交修改

现在我们需要将上面[`同步操作`](#%E5%90%8C%E6%AD%A5%E4%BF%AE%E6%94%B9)所产生的修改进行一次提交，以CityWebService为例

每次提交前都请确保本地Git配置的换行符自动转换为“不自动转换”

```shell
git config --global core.autocrlf 	#检查换行符自动转换设置，确保返回为false，不自动转换

git config --global core.autocrlf false		#如果上面返回的不是false，则执行下面两个命令
git config --global core.safecrlf true
```

暂存和提交

   ```shell
   cd CityWebService
   
   git status	#查看当前工作目录的状态，红色的行就是当前working copy中还未添加到暂存区（索引） 的修改
   git add .	#我们批量添加Git working copy中的全部修改
   git commit -m "同步Git之前的开发环境中修改的代码"
   ```

## 同步远程分支

完成上一步的`commit`操作后，我们所有的代码修改和更新都还停留在本地的你自己名字命名的开发分支上，打开Gitlab的网页是看不到你的这个本地分支的，我们现在将你本地分支的提交，同步到远程服务器

```shell
git push -u origin dev-yourname	

# -u 参数是告诉git，用本地的dev-yourname分支追踪远程的origin/dev-yourname分支，只在第一次push时设置一次，后面只需要checkout 到 dev-yourname分支后执行 git push，就会自动将本地dev-yourname 分支推送到远程的 origin/dev-yourname 分支了。

git branch -a	

#查看远程和本地全部分支，现在就可以看到origin/dev-yourname这个分支了，它代表服务器上的dev-develop分支，我们可以通过这种方式来实现代码的远程备份，每个人都可以在服务器上保留自己的开发分支
```



## 合并主分支（develop分支）

我们在dev-yourname分支上完成功能修改后，想要将代码merge到develop分支上去，这时候的操作是这样的

```shell
git checkout develop	# 切换到develop分支
git merge dev-yourname	# 合并本地dev-yourname分支到develop分支
git pull	# 将远程develop分支的最新更新拉取到本地
git push	# 将本地提交推送到远程分支

git checkout dev-yourname	#切换回自己的开发分支
```

现在可以打开Gitlab的网页，查看分支提交记录，确认我们的操作无误

   

至此，结束
