从零开始学Git(2):详解Git中的分支操作与GitHub使用
2017-04-13 本文已影响92人
多小啦
01. 分支操作(branch)
什么是分支
可以认为就是当前项目的副本,使得原有项目与该副本可以同时开发,
副本的功能实现成功与失败,都对原始副本没有影响。
如果分支中的副本成功了,可以将其合并到原始副本中,
那么就可以实现在不影响原始副本的情况下,进行新的内容的开发。
为什么要使用分支
可以在不修改原始项目的情况下,进行其他的操作。
由于每一次修改都可能造成全局的破坏,使用分支可以减小风险。
分支的使用场景
1. 分模块开发(多用户开发);
2. 解决bug
3. 复用。举例来说:适用于外包公司,给一个可复用的项目创建多个分支,设置不同的主题,卖给不同的公司。
因此,同一个项目可以卖给多个公司,项目外观不同,但是核心都是一样的。在后期维护上也可以同时进行。
如何操作分支
查看分支:git branch
创建分支:git branch 分支名
(很多公司对分支名的起名规则会有规定)
切换分支:git checkout 分支名
合并分支:
① 先切换到目标分支,即master
② 执行命令:git merge 分支名
将什么分支合并到当前分支上,即 git merge 分支名
③ 删除分支:git branch -d 分支名
分支合并的冲突
假定给新的分支命名为:dev。
在分支合并的时候,dev分支中与master分支中,如果有相同的文件(即同名的文件),那么文件将被覆盖。
但是如果两个分支中的这两个不同的文件,同时进行了修改:
1. master修改了,dev没有修改 -》合并的时候不变
2. master没有修改,dev修改了 -》直接合并
3. master和dev都修改了 -》
合并的时候就会保留两个版本的数据,那么需要程序员自己决定要保留什么,然后再提交结果。
02. 远程服务器
如果需要提供一个远程服务器的话,那么远程服务器中应该有一个仓库,而这个仓库中没有工作区,我们把这样的仓库称为裸仓库。
在本地使用文件夹模拟:
1. 创建一个裸仓库(需要文件夹)
使用命令:git init --bare
在当前目录下创建一个裸仓库
2. 可以使用该文件夹的名字(路径 名)作为该资源的url(unit resource location, 统一资源定位符)地址。
3. 用户需要对仓库的代码进行编码的时候,采用的步骤:
-》① 下载仓库代码:git clone 仓库的url
仓库的url改成下列地址格式:
file:///C:/Users/dora/Desktop/Remote/my_project
-》② 修改本地代码
-》③ 无问题后上传到远程的仓库中:git push [仓库的url]
**完整的push语法:git push -u url 分支名**
注意:远程仓库中的代码与本地仓库中的代码理论上是一模一样的
4. 如果是多人协作开发,在提交之前应该先pull一下,
将远程服务器中的数据再同步到本地,如果本地有冲突应该先解决冲突再进行一次提交。
多人协作的策略:
1. 每一个程序员应该考虑分到不同的文件或文件夹中。
2. 每次上传(push)之前,应该先下载(pull),减少出现的冲突。
03. Github
在实际开发的时候,我们的项目是放在远程仓库中的。
这个远程仓库可以是
1. github
2. git.oschina.net
3. gitlab
04. SSH
SSH采用一种加密算法,给每一条计算机生成一个公钥与秘钥。
ssh-keygen -t rsa
该命令会生成公钥与秘钥,会存储在家目录(cd ~)的 .ssh
文件夹中
将生成的公钥复制到远程仓库的(github)里面的设置选项的SSH中,
在克隆项目时,选择ssh验证样式。
05. ignore 忽略
默认情况下,git维护当前文件夹下的所有文件。
该文件是用于描述git管理的文件名字规则与文件夹规则的。
1. 在项目的根目录下创建一个 .gitignore
的文件(用命令行创建)
2. 在该文件中写上不需要管理的文件的名字,可以写文件夹,表示该文件夹下的所有文件都不管理。
3. 还可以使用 否定 !,例如希望只管理一个文件夹下的某一类型的文件,那么可以写成
src/
!src/*.js
忽略src文件夹的js文件
4. 添加提交即可。
看了这么多,不来我的GitHub上瞧瞧吗?:-D
https://github.com/dora-zc