草庐IT

Gitee应用(1):快速搭建Git环境在不同电脑同步文件

Xin学数据 2023-12-15 原文

一、前言

环境: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.txttest2.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.txttest2.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。

有关Gitee应用(1):快速搭建Git环境在不同电脑同步文件的更多相关文章

  1. ruby - 使用 RubyZip 生成 ZIP 文件时设置压缩级别 - 2

    我有一个Ruby程序,它使用rubyzip压缩XML文件的目录树。gem。我的问题是文件开始变得很重,我想提高压缩级别,因为压缩时间不是问题。我在rubyzipdocumentation中找不到一种为创建的ZIP文件指定压缩级别的方法。有人知道如何更改此设置吗?是否有另一个允许指定压缩级别的Ruby库? 最佳答案 这是我通过查看ruby​​zip内部创建的代码。level=Zlib::BEST_COMPRESSIONZip::ZipOutputStream.open(zip_file)do|zip|Dir.glob("**/*")d

  2. ruby - 其他文件中的 Rake 任务 - 2

    我试图在一个项目中使用rake,如果我把所有东西都放到Rakefile中,它会很大并且很难读取/找到东西,所以我试着将每个命名空间放在lib/rake中它自己的文件中,我添加了这个到我的rake文件的顶部:Dir['#{File.dirname(__FILE__)}/lib/rake/*.rake'].map{|f|requiref}它加载文件没问题,但没有任务。我现在只有一个.rake文件作为测试,名为“servers.rake”,它看起来像这样:namespace:serverdotask:testdoputs"test"endend所以当我运行rakeserver:testid时

  3. ruby-on-rails - 在 Rails 中将文件大小字符串转换为等效千字节 - 2

    我的目标是转换表单输入,例如“100兆字节”或“1GB”,并将其转换为我可以存储在数据库中的文件大小(以千字节为单位)。目前,我有这个:defquota_convert@regex=/([0-9]+)(.*)s/@sizes=%w{kilobytemegabytegigabyte}m=self.quota.match(@regex)if@sizes.include?m[2]eval("self.quota=#{m[1]}.#{m[2]}")endend这有效,但前提是输入是倍数(“gigabytes”,而不是“gigabyte”)并且由于使用了eval看起来疯狂不安全。所以,功能正常,

  4. ruby-on-rails - Rails 3 中的多个路由文件 - 2

    Rails2.3可以选择随时使用RouteSet#add_configuration_file添加更多路由。是否可以在Rails3项目中做同样的事情? 最佳答案 在config/application.rb中:config.paths.config.routes在Rails3.2(也可能是Rails3.1)中,使用:config.paths["config/routes"] 关于ruby-on-rails-Rails3中的多个路由文件,我们在StackOverflow上找到一个类似的问题

  5. ruby - 将差异补丁应用于字符串/文件 - 2

    对于具有离线功能的智能手机应用程序,我正在为Xml文件创建单向文本同步。我希望我的服务器将增量/差异(例如GNU差异补丁)发送到目标设备。这是计划:Time=0Server:hasversion_1ofXmlfile(~800kiB)Client:hasversion_1ofXmlfile(~800kiB)Time=1Server:hasversion_1andversion_2ofXmlfile(each~800kiB)computesdeltaoftheseversions(=patch)(~10kiB)sendspatchtoClient(~10kiBtransferred)Cl

  6. ruby - 如何将脚本文件的末尾读取为数据文件(Perl 或任何其他语言) - 2

    我正在寻找执行以下操作的正确语法(在Perl、Shell或Ruby中):#variabletoaccessthedatalinesappendedasafileEND_OF_SCRIPT_MARKERrawdatastartshereanditcontinues. 最佳答案 Perl用__DATA__做这个:#!/usr/bin/perlusestrict;usewarnings;while(){print;}__DATA__Texttoprintgoeshere 关于ruby-如何将脚

  7. ruby - 使用 Vim Rails,您可以创建一个新的迁移文件并一次性打开它吗? - 2

    使用带有Rails插件的vim,您可以创建一个迁移文件,然后一次性打开该文件吗?textmate也可以这样吗? 最佳答案 你可以使用rails.vim然后做类似的事情::Rgeneratemigratonadd_foo_to_bar插件将打开迁移生成的文件,这正是您想要的。我不能代表textmate。 关于ruby-使用VimRails,您可以创建一个新的迁移文件并一次性打开它吗?,我们在StackOverflow上找到一个类似的问题: https://sta

  8. ruby-on-rails - Rails 应用程序之间的通信 - 2

    我构建了两个需要相互通信和发送文件的Rails应用程序。例如,一个Rails应用程序会发送请求以查看其他应用程序数据库中的表。然后另一个应用程序将呈现该表的json并将其发回。我还希望一个应用程序将存储在其公共(public)目录中的文本文件发送到另一个应用程序的公共(public)目录。我从来没有做过这样的事情,所以我什至不知道从哪里开始。任何帮助,将不胜感激。谢谢! 最佳答案 无论Rails是什么,几乎所有Web应用程序都有您的要求,大多数现代Web应用程序都需要相互通信。但是有一个小小的理解需要你坚持下去,网站不应直接访问彼此

  9. ruby - 无法运行 Rails 2.x 应用程序 - 2

    我尝试运行2.x应用程序。我使用rvm并为此应用程序设置其他版本的ruby​​:$rvmuseree-1.8.7-head我尝试运行服务器,然后出现很多错误:$script/serverNOTE:Gem.source_indexisdeprecated,useSpecification.Itwillberemovedonorafter2011-11-01.Gem.source_indexcalledfrom/Users/serg/rails_projects_terminal/work_proj/spohelp/config/../vendor/rails/railties/lib/r

  10. ruby-on-rails - Rails 应用程序中的 Rails : How are you using application_controller. rb 是新手吗? - 2

    刚入门rails,开始慢慢理解。有人可以解释或给我一些关于在application_controller中编码的好处或时间和原因的想法吗?有哪些用例。您如何为Rails应用程序使用应用程序Controller?我不想在那里放太多代码,因为据我了解,每个请求都会调用此Controller。这是真的? 最佳答案 ApplicationController实际上是您应用程序中的每个其他Controller都将从中继承的类(尽管这不是强制性的)。我同意不要用太多代码弄乱它并保持干净整洁的态度,尽管在某些情况下ApplicationContr

随机推荐