git、github与SVN操作说明(p m)

经慈
2023-12-01

layout: post
title: “左中右三栏布局”
categories: 工具说明
tags: git
excerpt: 这篇是讲解git指令的文章。

  • git pull报错:Please, commit your changes or stash them before you can merge.,
    • 解决1: 放弃本地修改,直接覆盖之,git reset --hard git pull
    • 解决2:
      • 首先使用 git stash ,这个命令即把当前工作区的修改藏起来(放到另外一个区域),然后当前工作区看起来就没有修改了,就可以使用git pull
      • 接着使用 git stash pop 就可以把藏起来的修改,再显示出来

git是一个工具,和svn一样。npm是用来弄node_modules的一个包管理工具。

0、安装git

  • 安装:安装git直接点开安装包安装就好了,验证git是否安装成功,再git bush里面输入git --version
  • 配置环境变量:如果不配环境变量的话,在git的客户端是可以使用git的,但是在cmd的终端里面就不能用git命令,所以需要配置。
    • (1)找到git安装的bin目录,如D:\all software\git\Git\bin
    • (2)添加到环境变量path的最后,就好了
    • (3)现在就可以在cmd这些的客户端里面使用git命令了
  • 终端工具:FinalShell 用来进入 nginx 服务器
  • 安装git GUI工具:SourceTree 。https://www.sourcetreeapp.com/
  • 使用SourceTree处理git pull时候的冲突:即,如果自己本地改了个地方,而版本库里面也改了同一个地方,这时候 git pull 的时候就会冲突,就需要自己手动解决冲突。解决办法如下:
    • 1、先拉取(git pull)一下,看看有哪些文件冲突了
    • 2、点击贮藏(stash),然后取个名字,把当前的修改贮藏起来
    • 3、再进行拉取(git pull),即把版本库的内容拉取到本地来(这个时候是不会有冲突的,因为本地的修改被贮藏了)
    • 4、再点击贮藏区的文件,右键应用贮藏,(这时候文件状态那里就会出现贮藏的文件,并且文件前面的图标会变成叹号)
    • 5、接着打开vscode,这时候会自动把产生了冲突的文件打开。这时候就可以选择 采用当前修改(即从版本库拉到本地的更改)、采用传入的修改(即从贮藏区拿过来的更改)、保留双方更改(两个都保存)、比较变更
    • 6、接着把文件状态里面的文件,标记已解决,标记之后就没有冲突了
    • 7、最后,提交暂存区文件,并且将贮藏区的文件删除

一、git本地操作

1、初始化代码

注:git命令行窗口中有个master,表示这个是在主分支。要开其它分支,需要用命令来创建。

下面几个代码用来确定git上传到github之后显示的提交者的信息。一般情况,名字和github用户名设置相同。下面两个为安装了git之后必须的配置

设置:git config --global user.name "tangwanli"

设置:git config --global user.email "771147315@qq.com"

查看单一信息的话,不加后面的字符串 git config --global user.name

查看git下面所有的配置 git config --list

生成公钥私钥 ssh-keygen -t rsa. 生成的公钥会在用户目录的.ssh文件夹中(这个公钥主要是把用户本地与github线上绑定),然后把公钥输入到github里面就好了。

2、git3个分区操作

1、文件提交、查看操作

git中分为3个区:工作区、暂存区、版本库。工作区不能直接将代码提交到版本库,而必须先存到暂存区,再又暂存区提交到版本库。在暂存区的代码也可以取回工作区。

(1)查看当前工作区和暂存区哪些文件进行了修改git status,这个挺好用的。工作区修改的文件变为红色,暂存区修改的文件变为绿色

(2)添加文件到暂存区 git add project/index.js 或者添加所有文件到暂存区git add .

(3)从暂存区提交到版本库 git commit -m "note"如果后面不加注释,即输入git commit之后就直接回车,则会进入一个git bush vim编辑器,这个时候只需要按两次大写Z就可以退出。

(4)2、3的简写操作 git commit -a -m "note" 这个实际上是添加所有的文件,即git add .

(5)查看提交的历史,这个是查看所有人的提交历史 git log (git reflog只是查看自己这一个用户的提交历史)输入之后不会显示全部提交历史,按回车就会再一行一行的输出提交的历史。退出git log就按q。后面还可以跟一个-n参数,来固定查看多少条信息。如git log -2查看最近的两条提交历史。后面跟文件名,查看这个文件的提交历史 git log pro/try.js。查看文件夹 下文件提交历史git log pro/

(6)提交报错husky > pre-commit (node v10.15.3): 这个原因是eslint在commit的时候进行了代码检查,如果代码里面有红线就会报错。解决办法为,在项目根目录,找到文件夹.git\hooks,然后删除里面的类型为文件的文件

2、文件对比操作

(1)工作区和暂存区对比git diff.即显示出工作区和暂存区不同的信息。

(2)暂存区和版本库对比git diff --cached还有一种写法为git diff --staged效果完全一样.即显示出暂存区和版本库不同的信息。

()(3)工作区和版本库对比git diff master.即显示出工作区和版本库不同的信息。

(4)本地版本和fetch下来的线上仓库对比git diff master origin/master.直接显示出本地master和线上master的差别。

3、文件撤销、恢复操作

()(1)把文件从暂存区回退到工作区git reset HEAD(注:这后面可以不加点,就表示全撤销了。)。撤销单个文件git reset HEAD try.js把文件区的版本整个回退到版本库中指定的版本git reset --hard 459a4049c5f050b0f03b721459a4049c5f050b0f03b721为commit id。也可以用HEAD指针来操作git reset --hard HEAD^

注:HEAD为版本库中的一个指针,指向版本库的最顶层。HEAD^为指针向上移一位。HEAD~n表示指针向上移动n位(n取1,2,3,4…)。

()(2)把文件从工作区回退到版本库 git checkout -- try.js.即,摧毁工作区当中的那个文件,回退到版本库中那个。把指定文件回退到指定版本库中文件,可用git checkout 459a4049c5f050b0f03b721 try.js.即回退到459a4049c5f050b0f03b721这个版本时候的try.js文件.459a4049c5f050b0f03b721是用git log查看出来的commit后面的id中的一部分。

注:–后面不跟参数而跟空格,表示后面的是一个文件路径,是为了避免歧义。

(3)在一次commit了之后,把文件提交到了版本库,这个时候就会产生一条log注释。如果要修改这条log注释就输入git commit -m "change the note" --amend。并且,如果还想要提交文件,和上一次commit的文件一起共享一条注释,则先提交另外的文件,即git add try.html,再用刚刚的修改注释命令git commit -m "change the note" --amend

(4)查看自己这个账号对于当前版本库的提交历史 git reflog(git log查看所有人的提交历史)。运行这个命令就会弹出从clone仓库开始,到现在所进行的所有关于版本库的操作(不包括add)。在每一个操作的前面都会有commit id。用这个commit id就可以回到任何版本。

4、文件删除操作

(1)只有暂存区有的文件,把暂存区的删掉git rm try.js。但是,如果文件在文件区没有被删除,那么这个命令会报错。

(2)文件区和暂存区都有的文件,把两个都删掉git rm -f try.js

(3)文件区和暂存区都有的文件,只删掉暂存区git rm --cached try.js

二、远程同步操作

1、同步到远程仓库

(1)克隆远程仓库git clone git@github.com:tangwanli/my-projects.git

(2)查看远程仓库名字git remotegit remote -v可以查看远程仓库的地址

(3)修改远程仓库地址:用 git remote origin set-url [url] 可以修改远程仓库的地址(最后的url是新地址)。删除远程仓库地址git remote origin set-url [url]。新增一个远程仓库地址git remote add origin [url]。先删除再新增也是一个修改远程仓库地址的方法

(4)提交操作git push origin master,origin为远程仓库的名字、master为主分支。如果,要提交到其他分支,则先切换到那个分支(比如new1),然后git push origin new1

2、从远程仓库拉取到本地

(1)从远程仓库拉取过来,但是并不和本地仓库合并git fetch.再用git diff master origin/master查看差别。最后,用git merge origin/master进行线上仓库和本地仓库的融合。

(2)从远程仓库拉取过来,并且和本地仓库合并git pull.

3、分支操作

一个分支就相当于一个版本,每个人在自己的分支下面操作

()(1)查看所有的分支 git branch。直接在这后面加个名字就可以创建分支,如git branch new1,就创建了一个叫new1的分支。

注:master与new1也是指针,指向最后的那个版本。

()(2)切换到分支git checkout new1。即,切换到了new1这个分支上了。快速创建并切换到分支git checkout -b new2,就创建了一个new2分支,并且切换到了new2分支上。

()(3)上传(新建)分支到github: 这个就需要先切换到需要上传(新建)的分支,再git push origin new1

(4)查看当前分支下合并了哪些分支,先切换到当前分支,再git branch --merged。查看有哪些分支还没有合并在当前分支上git branch --no-merged

(5)分支修改了文件,然后把分支合并到主分支上。先切换到主分支,然后git merge new1如果分支文件和主分支文件有冲突,即,两个文件修改了同一个地方,是不能直接合并的,这时候用git status可以查看冲突的位置,然后需要我们去手动修改文件,才能合并。

(6)删除分支。删除分支需要输入两个命令。第一个,删除github上面的分支git push origin :new1(不加这个的话只会删除本地的分支,github上面不会有反应)。第二个,删除本地的分支,如果,new1合并在主分支上了git branch -d new1。如果new1没有合并在主分支上git branch -D new1(不删除本地分支的话,即使删除了github上面的分支,自己这里还是可以访问到分支)。

(7)拉取服务器上的所有分支,git fetch。如果本地有一些分支没有的话,用这个命令就可以把分支拉下来

4、标签操作

注:创建标签即,给自己的仓库打一个版本。

(1)查看标签git tag创建标签,也是直接加名字git tag v1.0

(2)提交标签git push origin v1.0,如果,创建了标签(名字为v1.0)

三、git仓库里面再嵌套另外的git仓库

为了方便分离管理,有时候需要在一个大的git仓库(以下简称主系统)里面clone另外的一个子git仓库(一下检查子系统)

  • (1)克隆两个系统:具体的操作就是,先clone主系统,然后在主系统的对应目录下面clone子系统
  • (2)代码提交:如果像上面那样clone的话。提交主系统代码的时候,是不会把子系统的代码一起提交到上面的,但是在git命令行窗口会提示子系统修改了多少行代码。提交子系统代码,需要到子系统的目录进行提交
  • (3)再次克隆主系统:像上面那样提交了之后,如果再次克隆主系统,那么子系统对应的文件夹依然是不会出现的。

四、github操作

1、为自己的仓库添加新的协作人员

进入仓库,点击setting再点击collaborators。接下来输入被邀请人的信息就ok了。

2、fork操作
  • fork相当于是把别人的开源项目开了一个分支,到自己github里面,即相当于别人那个仓库就是母仓库(上游仓库),而自己的仓库就是子仓库。那么,现在就有两个问题,第一个是实现上游仓库和自己fork子仓库的同步(因为fork到自己github里面就是一个固定的了,他上游仓库改变自己这里是肯定不会自动改变的),第二个是提交资源上游仓库上面去(因为自己提交资源,即push操作,是提交到自己的github仓库里面去的,而不是提交到上游仓库上面去的)
    • 实现上游仓库和自己fork子仓库的同步:
      • (1)在github里面点击new pull request,这时候页面上就有一个base repository,还一个head repository
      • (2)就把base repository(这个即最后合并的目标仓库,即底部,被压在下面的)选择为自己的仓库,
      • (3)选择之后他就会跳转,这时候点上面的那个compare across forks,
      • (4)又把head repository(这个就是最后合并的源仓库,即头部,被放在上面的)选择为上游仓库地址;
      • (5)再点击create pull request就好了。
  • 注:如果是把资源提交到上游仓库上面去,那么还是用上面的那个方法,不过就是把base repositoryhead repository值互换一下就好了
3、创建分支

github上面可以直接创建分支。直接点那个branch,然后输入名字,确定就创建了。

4、创建标签

github上面可以直接创建标签。直接点那个releases,然后创建就好了。

5、创建组织

我们一般都是创建的个人仓库,但是也可以创建组织(组织,即多人开发的一个页面,可以创建多个仓库,可以邀请很多人协同开发。)。直接点new organization,然后就可以创建。

6、博客

github上面创建博客,就直接是创建一个仓库,然后仓库的名字叫tanwanli.github.io.tangwanli为你github的名字。然后,就可以往这个仓库放东西了。

7、预览 GitHub 项目里的网页或 Demo

以前的话,在github静态页面的URL前面加上http://htmlpreview.github.io/?就好了,现在好像没办法了

8、github搜索技巧
  • (1)GitHub Trend 页面总结了每天/每周/每月周期的热门 Repositories 和 Developers,你可以看到在某个周期处于热门状态的开发项目和开发者。而 GitHub Topic 展示了最新和最流行的讨论主题,在这里你不仅能够看到开发项目,还能看到更多非开发技术的讨论主题,比如 Job、Chrome 浏览器等
  • (2)搜项目
    • Awesome + 关键字: Awesome 似乎已经成为不少 GitHub 项目喜爱的命名之一
    • 设置搜索条件: 灵活运用下面几个搜索条件:stars:、language:、forks,如,输入stars:>=500 language:javascript,得到的结果 就是收藏大于和等于 500 的 javascript 项目,排名前列是开源代码库和课程项目 freeCodeCamp、大热门的 Vue 和 React 项目
    • 设置搜索关键字的位置: 根据关键字的位置来搜索项目
      • qt in:name:表示在项目名称中搜索 qt 关键字
      • qt in:readme:表示在项目readme中搜索 qt 关键字
      • qt in:description:表示在 项目描述中搜索 qt 关键字
      • qt in:USERNAME:表示在USERNAME中搜索 qt 关键字
      • qt in:ORGNAME:表示在组织或机构名中搜索 qt 关键字
    • 直接输入关键字模糊搜索:直接在输入框中输入关键字进行模糊搜索的话,github查找到的资源是仓库名字或者仓库描述 中出现对应关键字的资源,比如vue.js的点餐系统
      • 如果想用多个关键字,则可以把关键字用OR(必须大写)来进行连接,如CollectionView OR UICollectionView OR collection
  • (3)搜开发者: 我们可以通过一些限定条件来搜索开发者
    • location:china:匹配用户填写的地址在china
    • language:C++:匹配开发语言为c++的开发者
    • follwers:>=1000:匹配拥有1000名关注者的开发者
    • jack in:fullname:匹配用户实名为jack的开发者

五、GIT客户端TortoiseGit

TortoiseGit是一个开放的GIT版本控制系统的源客户端,只支持Windows 系统

六、SVN

SVN实际上和git是差不多的

1、TortoiseSVN

TortoiseSVN 是 操作 SVN 版本控制系统的一个 客户端 工具

  • 使用方法:
    • <1>检出:首先进入TortoiseSVN客户端,把对应的文件夹检出到本地(这步就和git clone差不多)
    • <2>修改:修改之前需要先在本地进行锁定,然后进行修改,修改完了之后解除锁定(锁定就是在锁定期间别人不能修改这个文件,在TortoiseSVN上面也会有一个锁定状态)。最后本地右键提交。
    • <3>更新:右键更新。SVN里面的更新就和git pull差不多的。
  • SVN代码merge:操作实际上很简单。比如 我们要把 分支 branch 合并到主线 main
    • 首先打开 分支代码 branch,然后 show log,找到 自己要合并的那些提交记录
    • 选中提交记录,右键点击 merge,然后 在弹出框里面选中 主线的 main文件夹
    • 点击确定 就好了
  • SVN 代码暂存(Shelve): 代码写到一半,还不能提交代码,但需要紧急修复一个 Bug 并更新到服务器怎么办?把写到一半的代码丢弃?复制出来备份下?SVN的代码暂存是更好的选择。
    本文为你讲解在 Windows 上,使用 TortoiseSVN 如何利用代码暂存功能保存我们暂时无法提交的代码
    • 存入:使用 TortoiseSVN 非常方便,在目录下右键,选择 TortoiseSVN –> Shelve 就可以看到如下图,
      上面部分是选择需要暂存的文件,中间是暂存的名字,以便后面恢复时明白存的是什么内容,
      底部是填写暂存的描述信息,跟提交日志是一样的。如果点击 Shelve 则会把选中的文件都暂存起来,并且把本地的修改全部撤销。这时候,就可以把其它地方的代码合到现在这个分支里面去了
    • 取出:其它的代码合入现在分支之后,就可以取出之前暂存的代码。取出也非常方便,在目录下右键,选择 TortoiseSVN –> Unshelve,我们可以选择取出哪个暂存代码。
    • 注:实际上,暂存就好像把代码提交到了你本地的一个临时仓库,也是有版本管理的,
      如果你暂存时名字是选择一个已经存在的,则会生成一个新的版本号,跟 SVN 的代码提交是一样的。
    • 如果合入的时候报错了,那么对应的错误 也会在vscode中展示出来,只需要在vscode中应用变更之后;在报错的弹出框里面取消就好了。每次报错都会中止合入,所以改了错误之后需要重新再点击合入,来合入后续的代码,直到不报错为止;取消暂存也是一样的道理,报错解决了之后,要再次点击取消暂存

2、Beyond Compare 3

这东西是用来比较文件的,可以 配合 tortoiseSVN 来进行 文件版本回退的时候,多个文件夹的比较操作

下载与破解:这东西好像是要进行破解的,需要输入激活码,然后才可以使用

  • 配合 TortoiseSVN 使用
    • 选中 对应的有SVN版本控制的文件,右键 -> TortoiseSVN -> 设置 -> 差异查看器 -> 选择最上面的 设置用来比较不同版本文件的程序,选择为 外部,文件选择为 Beyond Compare 3 对应安装路径的 .exe 文件。
  • 使用Beyond Compare来进行文件比较:这个 可以选中多个文件夹 进行比较,然后就可以直接修改对应的部分,版本回退 操作如下
    • (1)确定文件夹:找到 需要比较的文件夹,即需要进行回退的文件夹
    • (2)复制new文件夹:复制目标文件夹,在文件夹后面加上一个 new
    • (3)查看日志:选中目标文件夹,右键 TortoiseSVN -> 显示日志
    • (4)回退版本:从日志中,找到 需要回退到的版本(当前文件夹修改之前的版本),右键 -> 复原到此版本。(这时候目标文件夹,就为选中的日志的版本来)
    • (5)复制old文件夹:复制目标文件夹,在文件夹后面加上一个 old
    • (6)回到最新版本:依然从日志中进行操作,把目标文件夹,复原到 日志中最新的那个版本
    • (7)选中并比较:同时选中 目标文件夹 和 old 文件夹,右键 比较,就会出现 Beyond Compare 的客户端。在这个客户端里面 通过小箭头点击,就可以把对应的代码进行移动,然后 保存,也就保存到了本地的文件中了
 类似资料: