一、前言
环境:Windows 11 64位 ;vscode:1.73.1
当你要操作在两台不同的电脑上操作,或许经常会遇到一个问题,就是怎么同步同一个或几个文件,以方便你在不同的电脑上进行同个文件内容的创作。
在申请了公司电脑之后,我就经常会遇到一个问题,工作相关的文件基本都存放在公司的电脑里,但是有时候,比如下班后、周末或节假日,公司电脑没有在身边,这时如果要维护一些数据产品或者交付一些临时急需求,可能就需要用自己的电脑临阵发挥一下光热。
这时候就经常会想起工作电脑里的某个文件,然后发现自己的电脑里没有相关的软件,然后就是“从头再来”……
为了解决这个问题,之前也用过不少在线文档,像石墨、飞书、语雀等,但这些用于写数据产品说明,数据记录或许还可以,拿来记录代码,实在有点不太合适,因为代码一般是在特定的环境里,边写边调试,最终确认下来的,如果再拉到在线文档,1个还好,2个也还行,3个呢,5个呢,10个呢?显然就有点费力了。
之前有了解git这个强大的版本控制工具,说可以记录各个版本的文件,可以查看修改前后的对比,可以各种diy的版本merge等,一直没有好好用起来,这次决定来试一试。
一点重要的说明:科学上网,使用GitHub时,国内的用户经常会遇到访问速度太慢,有时候还会出现无法连接的情况。为了保证有更好的体验,可以使用国内的Git托管服务——Gitee,简单讲,Gitee就是国内版的GitHub。下面就是使用Gitee来搭建相关的环境,并实现文件同步。
二、搭建Git环境
2.1 注册Gitee,并创建远程仓库
打开Gitee,注册一个账号,注册完登录,然后在右上角点击【+】创建一个仓库
创建完仓库会有提示说写README.md文档,有需要可以补充,如果是自己用不写也可以,一般建议写一下,方便了解仓库的作用。
创建完成之后,打开my_work仓库,会看到一个【克隆/下载】的按钮,可以复制相关的链接用于本地仓库的配置。
我的网址是:https://gitee.com/xin-data/my_work.git。
网址的结构很简单,就是域名https://gitee.com/+你的用户名(个人空间的名字)+仓库名+.git后缀。了解这个结构之后,也可以执行拼接网址。
接下来到本地进行相关的操作配置。
2.2 下载Git安装包,并创建本地仓库
2.2.1 下载安装Git
首先下载Git安装包👉Git安装包下载。打开网页后点击【Windows】标识。
在跳转的窗口,直接点击download下面的Click here to download
即可,网站会自动识别电脑适配的机型,然后做适配。
注:科学上网,一般在白天下载成功的概率更高哦!
等待下载完成之后,打开安装,可以使用默认的配置一直Next即可。
安装完打开Git Bash
,备用。(当然,cmd也可以完成相关的命令,区别在于底层操作系统不同,bash使用Unix,cmd是DOS。)
注:如何找到
Git Bash
——可以通过安装路径找到它(如果不知道安装在哪里,可以打开cmd
,输入where git
),有的电脑右击桌面会有一个Git Bash Here
(就是Git Bash
),或者在开始菜单找到它。
2.2.2 创建本地仓库
创建本地仓库,其实它本质上就是建一个文件夹,只是在Git有一个更高大上的名字叫仓库。事实上,也是有一点不同的,就是仓库需要通过一些配置才可以和远程仓库关联上。
假设我在D盘下建一个文件夹叫gitee用来存放所有的仓库,等下直接从远程仓库把test仓库克隆(同拷贝)下来。即:
d:\gitee
2.3 配置ssh key,关联本地和远程仓库
本地和远程的准备工作做完了,接下来就是打通二者的关联。在刚刚打开的的Git Bash上依次输入以下命令。
先做一些基本配置:
$ cd d:\\gitee #切换路径
$ git init #初始化仓库
$ git config --global user.name "【你的用户名】" #声明操作的用户名字,可diy,会出现在提交记录中
$ git config --global user.email "【你的邮箱】" #声明操作的用户邮箱,会出现在提交记录中
一个特别小但是特别重要的提示:Git Bash的复制快捷键是Ctrl+insert,粘贴是shift+insert。
接着生成密钥,中间会有一个询问过程,全部敲enter键,一般是有3次。
$ ssh-keygen -t rsa -C "【你的邮箱】" #生成密钥ssh
在生成密钥ssh返回的结果中,有两个路径特别重要,记录着公钥和私钥,如下红圈。
Your identification has been saved in /c/Users/55414/.ssh/id_rsa # 密钥路径
Your public key has been saved in /c/Users/55414/.ssh/id_rsa.pub # 公钥路径
接下来用cat+路径
查看对应的文件内容,以下命令会返回公钥内容,复制后添加到gitee上就可以进行联通了。登录Gitee后点击头像>设置>ssh公钥,根据提示粘贴并取个名字备忘,链接:
$ cat /c/Users/55414/.ssh/id_rsa.pub # 查看公钥,注意改为你自己的路径
添加完确定,然后回到Git Bash,输入一下命令查看是否添加成功
$ ssh -T git@gitee.com # 查看是否添加ssh成功
接下来连接一下远程,需要用到2.1提及的那个链接。我的网址是:https://gitee.com/xin-data/my_work.git,所以我的命令如下,你只要把xin-data
改为你自己的用户名、把my_work
改为你自己的仓库即可。
$ git remote add origin https://gitee.com/xin-data/my_work.git # 链接远程库origin
接下来可以使用以下命令看看连接的远程仓库地址
$ git remote -v # 查看链接的远程库
至此,基本完成环境的搭建。
三、基本的文件操作
先克隆一下远程的仓库:
$ git clone https://gitee.com/xin-data/my_work.git
注意,这时在接着2.3之后的步骤,也就是说在d:\\gitee
路径下操作的,如果是新打开的Git Bash,需要先切换路径cd d:\\gitee
。
克隆完之后,进入my_work
仓库,再继续3.1的操作。
$ cd d:\\gitee\\my_work #切换路径
#或者
$ cd my_work #切换路径
3.1 通过命令行操作
操作前可以先设置一下字符集,避免中文乱码,具体操作如下,在Git Bash的空白处右击>options(选项)>text(文本)>locale(本地),选择zh_CN,这时后面的character set字符集会自动填充UTF-8(如果没有自行选择)>save(保存)。
3.1.1 新增并提交文件
创建文件,可使用vi+文件名
的方式。输入命令后回车,会进入vim编辑器,默认是命令模式,可敲键盘i
(insert)键进入编辑模式,可敲入相关文本等信息,完成编辑之后输入Esc
键退出编辑模式,进入一开始的命令模式。这是可以根据以下需求输入对应的命令:
- 保存并退出
- 英文模式下输入
:wq
,然后回车(write and quit)。 - 大写英文模式下输入
ZZ
,然后回车。
- 英文模式下输入
- 不保存退出:
- 英文模式下输入
:q!
,然后回车。 - 英文模式下输入
:qa!
,然后回车。
- 英文模式下输入
$ vi test.txt #打开/创建文件,如果文件不存在则新增,这里我创建一个test.txt文件
$ rm test.txt #删除文件
保存好文件之后,接下来就是提交并发布到远程仓库。
$ git add test.txt #将工作区文件提交到暂存区
$ git commit -m "20221209测试提交" #将暂存区文件提交到本地版本库
$ git push -u origin master #推送到远程库,首次需要-u,之后可省略,master为分支名
如果有多个文件,都要add,有多种方式可供参考:
假设my_work/test
文件夹下有两个文件test1.txt
和test2.txt
都要提交,在add
阶段可以有以下几种方式:
#逐一提交
$ git add test1.txt #一个个添加
$ git add test2.txt #一个个添加
#一次提交多个
$ git add test1.txt test2.txt #一次多个
#指定文件夹下所有文件
$ git add my_work/* #指定某文件夹下所有
$ git add my_work/*.txt #指定某文件夹下所有.txt文件
$ git add my_work/test* #指定某文件夹下所有test*文件
#将所有文件都add一遍
$ git add * #添加所有文件
$ git add --all #添加所有文件
接上面假设,add
多个文件,然后一起commit
会给所有的文件都备注-m 后面的信息
。如使用以下命令提交之后,会给test1.txt
和test2.txt
都备注20221209测试提交
。
$ git commit -m "20221209测试提交"
如果要为每一个文件添加不同的备注,可以一个一个add
,每add
一个,commit -m
一次,或者在commit
提交的时候,也可以指定文件备注。
$ git add test1.txt
$ git commit -m "提交test1.txt"
$ git add test2.txt
$ git commit -m "提交test2.txt"
#或者
$ git add test1.txt test2.txt #一次多个add
$ git commit -m "提交test1.txt" test1.txt #指定文件名,每个单独加备注
$ git commit -m "提交test2.txt" test2.txt #指定文件名,每个单独加备注
也可以多行备注
$ git commit -m "commit title
>
> commit description"
#或者,一个-m一行
$ git -m "commit title" -m "commit description"
#或者,不加-m,直接使用以下命令,这时候会弹出一个vim编辑器可以编写备注信息。
#注意,此时vim编辑器第1行默认是标题,第2行开始是描述。
$ git commit
3.1.2 拉取远程文件
常用的有两种方法:git pull <remote>
和git fetch <remote> <branch>
。
git pull <remote>
:从远程库<remote>
抓取所有分⽀并合并到本地仓库。git fetch <remote> <branch>
:从远程库<remote>
抓取指定分支到本地仓库。去掉将抓取远程所有分⽀。git pull <remote>
=git fetch <remote>
+git merge <remote>
注意:当本地库和远程库的文件冲突时,最后使用git fetch
,然后自行对比解决冲突,可以在Git Bash分别查看两个文件,对比差异,或者使用第三方可视化工具(如vscode)查看;如果直接git pull
可能会出现一些逻辑不恰的合并。如果远程版本比本地版本更新,可以直接用git pull
更新。
像我如果操作文本之前先pull一下,再更新文件,基本上不会出现冲突,但是从学习角度,可以尝试一下冲突~~
$ git pull origin #拉取远程库文件并合并到本地仓库
#或者
$ git fetch origin #拉取远程库文件
$ git merge origin #合并到本地仓库,将origin合并到当前分支
3.2 通过vscode操作
经过前面的铺垫,这时候打开vscode,打开刚刚作为本地仓库的文件夹(如我的是d:\gitee\my_work
)。
这时候打开左侧栏第三个Git的图标,就可以进行可视化的操作本地仓库和远程仓库的链接,任何改动,在该图标上便会有相关的提示(比如我下面的截图,有一个change信息)。
这个Changes内容怎么提交呢?其实也很简单,add
命令相当于下图的+
,文件后面的+
可以进行单文件添加,Changes一栏的+
可以批量添加。
点了+
后,出现一个暂存区Staged Changes(如下图),点击蓝色按钮commit
。
这时候会弹出一个文本框,前面是一些说明,大意是“请为您的更改输入提交消息。以“#”开头的行将被忽略,空消息将终止提交。在分支master上,你的分支是最新的’origin/master’。”
Please enter the commit message for your changes. Lines starting with ‘#’ will be ignored, and an empty message aborts the commit.
On branch master ,Your branch is up to date with ‘origin/master’.
也就是说随便输入个信息便可以提交。输入完备注后,点击文件右上角的对钩,便可commit
(相当于git commit
)
接下来就是发布到远程仓库(如下图),可以点击Sync Changes
按钮,点完会提示该按钮是pull and push
,也可以点击右上角的···
,选择push
。
提交之后,可以在Gitee上看到对应的文件及备注,如下图。
四、小结
备忘录:
- 先注册Gitee,并创建远程仓库;
- 下载Git安装包,并安装;
- 创建本地仓库,然后配置ssh key,配置命令和文件操作命令整合如下:
$ cd d:\\gitee #切换路径
$ git init #初始化仓库
$ git config --global user.name "【你的用户名】" #声明操作的用户名字,可diy,会出现在提交记录
$ git config --global user.email "【你的邮箱】" #声明操作的用户邮箱,会出现在提交记录中
$ ssh-keygen -t rsa -C "【你的邮箱】" #生成密钥ssh,中间会有一个询问过程,全部敲enter键,一般是有3次。可能未必是邮箱,只是邮箱是唯一的。需要唯一而已
$ cat /c/Users/55414/.ssh/id_rsa.pub #查看公钥,注意改为你自己的路径,添加到gitee的设置>ssh公钥中,链接:https://gitee.com/profile/sshkeys
$ ssh -T git@gitee.com #查看是否添加ssh成功
$ git remote add origin git@gitee.com:xin-data/my_work.git # 链接远程库origin
$ git remote -v #查看链接的远程库
#克隆远程库
$ git clone https://gitee.com/xin-data/my_work.git
#切换路径
$ cd my_work
#文件操作
$ touch file #创建文件,空文件
$ vi test.txt #打开/创建文件,如果文件不存在则新增,这里我创建一个test.txt文件
$ rm test.txt #删除文件
##vim编辑器操作
#i(insert)键进入编辑模式,Esc键退出编辑模式,进入命令模式。
#命令模式下:
#- 保存并退出
# - 英文模式下输入:wq,然后回车(write and quit)。
# - 大写英文模式下输入ZZ,然后回车。
#- 不保存退出:
# - 英文模式下输入:q!,然后回车。
# - 英文模式下输入:qa!,然后回车。
#提交操作
$ git add test.txt # 将工作区文件提交到暂存区
$ git commit -m "20221209测试提交" # 将暂存区文件提交到本地版本库
$ git push -u origin master # 推送到远程库,首次需要-u,之后可省略,master为分支名
##多文件add
$ git add test1.txt # 一个个添加
$ git add test2.txt # 一个个添加
$ git add test1.txt test2.txt # 一次多个
$ git add my_work # 指定某文件夹
$ git add my_work/* # 指定某文件夹下所有
$ git add my_work/*.txt # 指定某文件夹下所有.txt文件
$ git add my_work/test* # 指定某文件夹下所有test*文件
$ git add * # 添加所有文件
$ git add --all # 添加所有文件
#多文件commit
##多文件同一个备注
$ git commit -m "20221209测试提交"
##多文件不同备注
$ git add test1.txt
$ git commit -m "提交test1.txt"
$ git add test2.txt
$ git commit -m "提交test2.txt"
#或者
$ git add test1.txt test2.txt #一次多个add
$ git commit -m "提交test1.txt" test1.txt #指定文件名,每个单独加备注
$ git commit -m "提交test2.txt" test2.txt #指定文件名,每个单独加备注
#多行备注
$ git commit -m "commit title
>
> commit description"
#或者,一个-m一行
$ git -m "commit title" -m "commit description"
#或者,不加-m,直接使用以下命令,这时候会弹出一个vim编辑器可以编写备注信息。
#注意,此时vim编辑器第1行默认是标题,第2行开始是描述。
$ git commit
#拉取文件
$ git pull origin #拉取远程库文件并合并到本地仓库
#或者
$ git fetch origin #拉取远程库文件
$ git merge origin #合并到本地仓库,将origin合并到当前分支
可选方式,通过vscode可视化操作,需要先安装vscode。