版本控制 - Git/SVN - 学习/实践

发布于:2022-12-06 ⋅ 阅读:(1081) ⋅ 点赞:(0)

1.应用场景

主要用于学习和高效正确使用版本控制.

2.学习/操作

 

1. 文档阅读

SVN中文网 - svn安装、svn部署、svn操作手册、visualsvn

Home · TortoiseSVN -- 常用的安装&使用 -- 小乌龟svn

Git - 学习/实践 - 以及相关操作_穿素白衫的中少年的博客-CSDN博客

教程

SVN 教程 | 菜鸟教程

Git 教程 | 菜鸟教程

其他

PHPstorm配置svn及问题解决_穿素白衫的中少年的博客-CSDN博客_phpstorm svn

版本控制[Git/SVN] - 如何将新修改的文件导出_穿素白衫的中少年的博客-CSDN博客_git导出修改的文件

Git/SVN 拉/推代码出现问题及解决办法_穿素白衫的中少年的博客-CSDN博客

https://blog.csdn.net/jesonjoke/article/details/77094867

2. 整理实践

2.1 SVN

Linux服务器上配置多个svn仓库

SVN的使用 2019.4.4 William_Ning

1). 取消当前文件修改

【revert命令顾名思义就是对修改过的东西进行回滚操作,一般有2种情况发生时需要用到回滚的操作】

【备注:svn的文件路径是相反的,如果提示,skipped,请试将路径分隔符修改下,继续操作】如下:

1.1【修改过的东西没有递交(commit)】

svn revert [-R] xxx_file_dir //如果需要回滚的是一个目录则加上-R(递归)可选参数

备注:类似于git checkout . ///撤销所有的修改

1.2 【改动的东西并且递交了】 //TBD 待验证

这种情况下,用svn merge命令来进行回滚。

步骤如下:

1)执行#svn update命令保证工作区文件是最新的,比如最新版本号是20

2)然后找出要回滚的确切版本号:

执行svn log xxx_file_dir

假设根据svn log日志查出要回滚的版本号是10,如果想要更详细的了解情况,可以使用svn diff -r 20:10 [xxx_file_dir]

3)回滚到版本号10:

执行svn merge -r 20:10 xxx_file_dir

4)提交回滚:

svn commit -m "注释..."

提交后版本变成了29

完毕

补充: 【删除未纳入版本控制中的文件】//未生效,原因待查

svn st | grep '^?' | sed -n 's/^?[ \t]*//p' | xargs rm -rf

或者是:

svn st | grep '^?' | awk '{print $2}' | xargs rm -rf

2). 提交代码基本流程

已经拉下code.【默认如此】

即: svn checkout url

如下:

svn checkout http://tc-svn.tencent.com/263TestTeam/XTC_proj/branches/xtc_ant/

2.1 添加到版本库中

svn add .

2.2 更新远程仓库代码到本地

svn update

【该步骤放在2.2之前也可以,但是在修改团队开发频率不大的情况的,建议使用该种方式】

svn update

2.3 提交代码

svn commit -m ‘commit information’

2.4 查看当前状态

svn status

2.5 查看历史记录

svn log

【备注】

1.建议使用svn UI客户端 【即tortoiseSVN】进行操作,很方便.

3). SVN 与 Git 的区别

也可以参见查看上面的图

3.1 svn直接使用commit 便提交到【远程】仓库.

而git需要有git push操作,方可.

【即 svn服务器,常是内部服务器搭建,相对于git,不介入互联网,而显得似乎更加安全】

3.2 同目录下,同一套code只能有一个远程仓库. //TBD

【如果想连接多个仓库,则需要放到不同目录,服务器上的svn仓库也需要部署多份】

3.2 svn可以单个文件提交【即可以天提交单个修改】,而git是一次性提交所有的修改。

3.3 svn没有添加到版本库中的文件,使用svn status 时,会以 ‘?’开头,表示未知,因为未纳入版本控制中.git 则会以为A开头,表示新建的,待Add操作.

3.4 撤销未提交到的文件修改.

svn 并不能使用svn checkout filename来操作. 【svn chekout 是检出仓库的操作】

git 则可以git checkout .filename来操作

svn是使用svn revert filename 【详见1.取消当前文件修改

2. Git

占坑/  填坑/---------------------------------------------------------2018.5.27 

环境:win10 专业版   recorder : william ning

默认:已经安装git.[git bash]所有操作均在git bash 中

--------------- Git的更多信息和使用参见 -- 另外本博客Git文档

https://so.csdn.net/so/search?q=git&t=blog&u=william_n

一. Git的使用

1). 基本的使用

git add 文件名[相对路径]  或者 git add .

git  commit -m "备注信息"

git pull 远程仓库名[默认为origin,可修改]  分支名  //提交代码之前先要拉取远程仓库相应分支代码 [也不是必须先要pull,可以直接push,如果报了冲突,会提醒需要git pull 然后解决冲突,之后push]

git push 远程仓库名[默认为origin,可修改]  分支名  //如果有冲突解决完,按照git add/commit  之后push 没有冲突,成功push即可.

2). Git 分支操作

添加远程分支 : git remote add upstream <Nick Gitlab 地址>  //upstream是远程仓库名 默认是origin  

【备注: 这里用的是GitLab,或者GitHub均可,上述命令均使用,但若用微软TFS,则需要使用 **** 命令暂时未记住,稍后补上.】

查看分支:git branch  [--list]   //参数可选

创建分支:git branch <name>

切换分支:git checkout <name>

创建+切换分支:git checkout -b <name>

合并某分支到当前分支:git merge <name>

删除分支:git branch -d <name>   //如果尚未是尚未合并的分支,需要用git branch -D <name>   git一般常有提示,请认真阅读英文提示信息,常会有下步思路.

拉取线上分支[github或者gitlab]到本地分支:

方式有三:

获取线上分支,但本地没有该分支

参考:
https://blog.csdn.net/zhangxiaoyang0/article/details/79286825

方法一

使用如下命令:
git checkout -b 本地分支名x origin/远程分支名x

使用该方式会在本地新建分支x,并自动切换到该本地分支x。

采用此种方法建立的本地分支会和远程分支建立映射关系。


方式二
使用如下命令:

git fetch origin 远程分支名x:本地分支名x

使用该方式会在本地新建分支x,但是不会自动切换到该本地分支x,需要手动checkout。

采用此种方法建立的本地分支不会和远程分支建立映射关系。

方式三
跟方式二其实是一样的,但是更加方便,直接切换到相应分支下.
①git fetch 远程仓库名
如: git fetch disney-delta
②git checkout  相应的分支名
如: git checkout DELTA-2928_Retailer_site_db_api

3). Git 版本回退

本地仓库版本回退: 

git log [--oneline]  //查看提交记录,并记下要回退的commit id

git reset --hard  commit id  //commit id即上面对应的commit id 如:f634478d2f3d514b5ed77f6b1c8bd5533779fc21 

本地仓库回退至远程仓库版本: 

git reset --hard  commit id  //commit id 是远程仓库commit id,可以到远程仓库中查看.如 gitlab中8861eee5  本地commit id 与远程仓库commit id 明显长度不同,应为不同的id.

4). git rebase合并多次commit

git log   或者git log --oneline  [推荐使用后者,不过看不到都是谁的提交]

//之后使用wq或者q均可. //离开可视模式.便可以重新输入命令

git rebase -i HEAD~4   //4表示要合并的提交的数量,最新的四个[从下往上数,最新的提交在下面,可以通过提交时间来确认]

git rebase -Idevelop  //develop是基准线  rebase即重新设置基准线,即有参考才行

git add .

git rebase--continue

git log //查看确认

取消git rebase 命令 //即取消rebasing状态

git rebase --abort

详细参考:

使用git rebase合并多次commit  :

https://blog.csdn.net/yangcs2009/article/details/47166361

聊下 git rebase -i - 王清培 - 博客园

5). webhook 的使用[未使用到,暂不记录] 

在gitlab 中使用webhook 实现php 自动部署git 代码

资源参考:

在gitlab 中使用webhook 实现php 自动部署git 代码_个人文章 - SegmentFault 思否

gitlab - GitLab 实现代码自动部署_个人文章 - SegmentFault 思否  //比较推荐

Jenkins进阶-Gitlab使用Webhook实现Push代码自动部署(3) - 梦雨情殇 - 博客园

Gitlab上hooks:

https://code.***.io/william_ning/d****/settings/integrations

https://code.***.io/nick_cai/d****/settings/integrations//猜测

6). 查看记录

查看最近提交修改的文件: git log --name-status

后续补充

...

3.问题/补充

TBD

4.参考

参见文档阅读

后续补充

...

本文含有隐藏内容,请 开通VIP 后查看