今天就结合`GitHub`,经过`Git`命令,来了解如何实现开源代码库以及版本控制
html
GitHub是一个面向开源及私有软件项目的托管平台,由于只支持Git 做为惟一的版本库格式进行托管因此咱们须要下载一个Git客户端软件,用来执行各类指令git
Git下载地址https://git-scm.com/github
下载完毕后,配置`path`环境变量,`E:\develop\git\Git\bin`(我本机的在E盘下)
app
在`doc`命令行窗口输入`git`命令,若是出现以下的信息,说明安装成功,
工具
点击鼠标右键,菜单栏会出现 `Git GUI` 和 `Git Bash`GUI: Graphical User Interface(用户图形界面)Bash:是Windows下的命令行工具
gitlab
版本存储仓库:url
接下来我用`git`命令,来一步步实现GitHub发布项目,版本控制的功能
spa
一、首先在电脑上建立一个空文件夹,我为这个空文件夹起名叫demo,而后进入该文件夹首先在GIT终端执行,`git init` 指令,会在demo文件夹生成`.git`文件夹.net
二、在demo文件夹内建立一个a.txt文件,而后经过`git status` 查看,该指令做用是 列出修改过的(绿色标识)、新建立的(红色标识)、已经暂存但未提交的文件(白色标识)
命令行
三、而后经过`git add 某文件(git add . 添加所有)`添加刚才咱们新建的a.txt文件
四、而后经过`git commit -m "备注信息"`,提交本次内容
以上4步的操做效果截图以下:
五、咱们利用上述指令,在往demo文件夹中添加一个b.txt文件,而后经过`git log`查看咱们的操做记录,而后能够查询到咱们添加a.txt和b.txt的log日志,而后经过`git reset --hard b96f962d0f835e3114b6f51bf7c9bfe6125626e3`,去回退到咱们的操做节点,此时我回退到第一次添加文件节点,也就是demo文件夹只有一个a.txt文件,如下是git端的效果截图
六、此时查看`git log` 结果发现只有一条操做记录,也就是咱们添加的a.txt的记录,咱们以前进行的第二步操做呢?也就是添加的b.txt文件节点时,咱们如何回退到最后这个节点呢?咱们能够利用`git reflog`
七、此刻demo文件夹中的2个文件内容,a.txt文本以下:
b.txt文本内容以下:
咱们继续为b.txt添加以下记录信息
此刻b.txt文件内容以下:
上述意思就是在更新`b.txt`文件内容,添加操做记录若是用到开发场景,咱们在**需求1**,然而因为工做须要,**需求1**须要暂且搁置,咱们须要作**需求2**,**需求1**代码须要砍掉,等咱们作完**需求2**,咱们继续须要获取咱们以前**需求1**的代码,咱们能够利用`git stash`命令,如下是该命令的含义
此次会有冲突,咱们须要解决冲突,便可
八、咱们能够经过`git branch` 查看咱们的项目全部分支,默认只有一个`master`主分支,咱们能够经过`git branch dev`(dev是咱们起的分支名)新建一个分支,名字是dev开发分支,而后经过`git checkout dev`切换到咱们新建的dev分支,咱们也能够经过`git checkout -b 分支名`一并实现建立、切换分支的功能
九、咱们切换到`dev`分支,经过`touch 文件名`建立一个文件,而后add、commit ,意思就是在dev分支上作一些修改,并保存在dev分支上,而后在切回master分支,咱们要作的就是将dev上更新的内容,也在master上作一样的修改,咱们能够用`git merge` 分支名,将dev上的更新内容,合并到master上另外删除分支使用`git branch -d 分支名`
十、利用`github`建立项目,会出现以下指令,须要在git终端输入建立生成项目,要添加一个新的远程仓库,能够指定一个简单的名字,以便未来引用,运行 git remote add [shortname] [url]:
经过`git remote add origin 和https://github.com/iyongfei/test.git`
十一、接下来咱们经过`git clone https://github.com/iyongfei/test.git`来`clone`下载咱们的`github`项目,咱们默认拉取的是`master`分支(默认分支能够在**github**设置其余分支)
而后根据之前的git指令,进行`git add .` 和 `git commit -m "备注信息"`,
注意注意,因为项目开发都是协同开发,咱们在接下来在提交代码以前,须要`git pull origin 分支`,拉取对应分支代码,而后若是有冲突解决冲突,而后在`git push origin 分支名`
ps:我以下的截图在提交代码时,为了简化操做,没有`git pull`
十二、咱们还能够往`github`项目上添加新分支,咱们经过`git branch 分支`建立分支,经过`git checkout 分支`切换分支,(或者经过`git checkout -b 分支`,建立并切换分支),而后在添加、提交(我这里没有添加任何信息),最后`git push origin dev` 往github项目上添加新分支
1三、咱们还能够拉取其余分支的内容到本分支,好比我在`master`上添加内容,而后我在`dev`分支上去拉取`master`上的代码,而后在提交到对应的github分支`dev`上(我本地依然没有添加额外的内容)
1四、冲突如何产生?咱们如何解决冲突?当本身拉取了`dev`的代码,同事也拉取了`dev`的代码,同事先于我提交代码,而后本身也在本地修改了代码,若是修改了同一个文件,会出现冲突状况,再次拉取`dev`代码会失败,并且提交失败
解决方式一:先在本身本地`dev`,经过`git stash`暂存修改,而后`git pull 分支`代码,再而后`git stash pop` 合并代,解决冲突(删掉咱们不须要的代码),而后在提交代码
解决方式二:不利用`git stash`,利用`compare`对比软件,将有冲突的文件,剪切出来,而后拉取`dev`分支代码,就把github的`dev`分支最新代码,同步下来,而后在跟本身的剪切出来的代码段,进行对比,将本身的代码更新到同步下来的代码,而后在提交到github对应的分枝上
########################如下是项目中的截图########################
一、首先进入项目的主分支
二、Fork一份工程,当作本身的项目管理分支
三、在电脑上建立一个文件夹,先Clone一份本身工程的项目分支(xxx屏蔽公司信息)
git clone git@xxxx.gitlab.com:xxxxxx/SELand_Vertu
四、进入项目的二级目录进入git客户端,确认要pull分支
git branch看看当前的分支
git checkout -b develop 切换到develop分支,由于我要pull拉去develop分支上的项目
五、而后在将本身的项目分支同步项目主分支(咱们项目分支为develop分支)
git pull git@xxx.gitlab.com:xxx/SELand_Vertu develop
六、每次提交代码时候,须要先同步项目主分支代码
git status是哪些文件有所修改
git diff 能够查询所修改的代码
git add -A 增长本身所作的修改
git commit -a 提交全部修改的代码
git push origin develop 提交代码
七、最后在new merge request,提交给相应的负责人,进行merge代码
错误解决::::
若是某个同事提交代码,老大没有及时merge代码,本身也提交该文件的代码,那么老大merge代码会有冲突
会差生以下的错误提示:
Pull is not possible because you have unmerged files.
Please, fix them up in the work tree, and then use 'git add/rm <file>'
as appropriate to mark resolution, or use 'git commit -a'.
能够这样修改
一、git pull git@xxx.gitlab.com:xxx/SELand_Vertu develop先同步一下会出现以上的错误
二、pull会使用git merge致使冲突,须要将冲突的文件resolve掉 git add -u,
三、在项目中看看哪些代码是对方改的,哪些代码是本身修改的,在合并成一份最新的代码
四、git commit以后才能成功