【Git】4. 远程管理

远程操作

理解分布式版本控制系统

我们⽬前所说的所有内容(⼯作区,暂存区,版本库等等),都是在本地!也就是在你的笔记本或者计算机上。
⽽我们的 Git 其实是分布式版本控制系统!什么意思呢?
可以简单理解为,我们每个⼈的电脑上都是⼀个完整的版本库,这样你⼯作的时候,就不需要联⽹了,因为版本库就在你⾃⼰的电脑上。既然每个⼈电脑上都有⼀个完整的版本库,那多个⼈如何协作呢?
⽐⽅说你在⾃⼰电脑上改了⽂件A,你的同事也在他的电脑上改了⽂件A,这时,你们俩之间只需把各⾃的修改推送给对⽅,就可以互相看到对⽅的修改了。
在这里插入图片描述
分布式版本控制系统的安全性要⾼很多,因为每个⼈电脑⾥都有完整的版本库,某⼀个⼈的电脑坏掉了不要紧,随便从其他⼈那⾥复制⼀个就可以了。
在实际使⽤分布式版本控制系统的时候,其实很少在两⼈之间的电脑上推送版本库的修改,因为可能你们俩不在⼀个局域⽹内,两台电脑互相访问不了。也可能今天你的同事病了,他的电脑压根没有开机。因此,分布式版本控制系统通常也有⼀台充当“中央服务器”的电脑,但这个服务器的作⽤仅仅是⽤来⽅便“交换”⼤家的修改,没有它⼤家也⼀样⼲活,只是交换修改不⽅便⽽已。有了这个“中央服务器”的电脑,这样就不怕本地出现什么故障了(⽐如运⽓差,硬盘坏了,上⾯的所有东西全部丢失,包括git的所有内容)
在这里插入图片描述

远程仓库

Git 是分布式版本控制系统,同⼀个 Git 仓库,可以分布到不同的机器上。怎么分布呢?最早,肯定只有⼀台机器有⼀个原始版本库,此后,别的机器可以 “克隆” 这个原始版本库,⽽且每台机器的版本库其实都是⼀样的,并没有主次之分。
你肯定会想,⾄少需要两台机器才能玩远程库不是?但是我只有⼀台电脑,怎么玩?
其实⼀台电脑上也是可以克隆多个版本库的,只要不在同⼀个⽬录下。不过,现实⽣活中是不会有⼈这么傻的在⼀台电脑上搞⼏个远程库玩,因为⼀台电脑上搞⼏个远程库完全没有意义,⽽且硬盘挂了会导致所有库都挂掉,所以我也不告诉你在⼀台电脑上怎么克隆多个仓库。

实际情况往往是这样,找⼀台电脑充当服务器的⻆⾊,每天24⼩时开机,其他每个⼈都从这个“服务器”仓库克隆⼀份到⾃⼰的电脑上,并且各⾃把各⾃的提交推送到服务器仓库⾥,也从服务器仓库中拉取别⼈的提交。

完全可以⾃⼰搭建⼀台运⾏ Git 的服务器,不过现阶段,为了学 Git 先搭个服务器绝对是⼩题⼤作。好在这个世界上有个叫 GitHub 的神奇的⽹站,从名字就可以看出,这个⽹站就是提供 Git 仓库托管服务的,所以,只要注册⼀个GitHub账号,就可以免费获得 Git 远程仓库。
github 是国外的⽹站,速度⽐较慢。下来,我们从零开始,使⽤⼀下码云远程仓库。

新建远程仓库

新建远程项⽬仓库:
在这里插入图片描述
填写基本信息
在这里插入图片描述
创建成功
在这里插入图片描述
创建成功后,我们可以对远程仓库进⾏⼀个基本的设置:开源or私有
在这里插入图片描述
在这里插入图片描述
从创建好的远程仓库中我们便能看到,之前在本地学习过的分⽀,也存在于远程仓库中并被管理起来了。
刚创建的仓库有且只有⼀个默认的master分⽀。
只有master分支会自动建立本地和远端之间的连接
在这里插入图片描述

克隆远程仓库

克隆到本地 – git clone XXX.git(路径)

克隆/下载远端仓库到本地,需要使⽤ git clone 命令,后⾯跟上我们的远端仓库的链接,远端仓库的链接可以从仓库中找到:选择“克隆/下载”获取远程仓库链接:

SSH 协议和 HTTPS 协议是 Git 最常使⽤的两种数据传输协议。
SSH 协议使⽤了公钥加密和公钥登陆机制,体现了其实⽤性和安全性,使⽤此协议需要将我们的公钥放上服务器,由 Git 服务器进⾏管理。使⽤ HTTPS ⽅式时,没有要求,可以直接克隆下来。

HTTPS

使⽤ HTTPS ⽅式:

hyb@139-159-150-152:~$ git clone https://gitee.com/hyb91/git_teaching.git
Cloning into 'git_teaching'...
Username for 'https://gitee.com': hyb91
Password for 'https://hyb91@gitee.com': 
remote: Enumerating objects: 4, done.
remote: Counting objects: 100% (4/4), done.
remote: Compressing objects: 100% (4/4), done.
remote: Total 4 (delta 0), reused 0 (delta 0), pack-reused 0
Unpacking objects: 100% (4/4), 1.80 KiB | 1.80 MiB/s, done.
hyb@139-159-150-152:~$ ls
gitcode git_teaching 
hyb@139-159-150-152:~$ ls git_teaching/
README.en.md README.md

SSH

使⽤ SSH ⽅式:

hyb@139-159-150-152:~$ git clone git@gitee.com:hyb91/git_teaching.git
Cloning into 'git_teaching'...
The authenticity of host 'gitee.com (212.64.63.215)' can't be established.
ECDSA key fingerprint is SHA256:FQGC9Kn/eye1W8icdBgrQp+KkGYoFgbVr17bmjey0Wc.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added 'gitee.com,212.64.63.215' (ECDSA) to the list of know
git@gitee.com: Permission denied (publickey).
fatal: Could not read from remote repository.
Please make sure you have the correct access rights
and the repository exists.

使⽤ SSH ⽅式克隆仓库,由于我们没有添加公钥到远端库中,服务器拒绝了我们的 clone 链接。
需要我们设置⼀下:
第⼀步:创建SSH Key。在⽤⼾主⽬录下,看看有没有.ssh⽬录,如果有,再看看这个⽬录下有没有id_rsa 和 id_rsa.pub 这两个⽂件,如果已经有了,可直接跳到下⼀步。
如果没有,需要创建SSH Key:

# 注意要输⼊⾃⼰的邮箱,然后⼀路回⻋,使⽤默认值即可
hyb@139-159-150-152:~$ ssh-keygen -t rsa -C "2689241679@qq.com" 
Generating public/private rsa key pair.
Enter file in which to save the key (/home/hyb/.ssh/id_rsa): 
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /home/hyb/.ssh/id_rsa
Your public key has been saved in /home/hyb/.ssh/id_rsa.pub
The key fingerprint is:
SHA256:sepKZUwKIXjJxYcot49tvOW+Aa+pEhdsRqVDFSmgQZo 2689241679@qq.com
The key's randomart image is:
+---[RSA 3072]----+
|*+oB=+ |
|==Oo+ . |
|E*+o .. . |
| *o + o |
| o *o + S |
|. o ==.. |
| o ..++ |
|. ..+.. |
| ...+o+. |
+----[SHA256]-----+

顺利的话,可以在⽤⼾主⽬录⾥找到 .ssh ⽬录,⾥⾯有 id_rsa 和 id_rsa.pub 两个⽂件,这两个就是SSH Key的秘钥对, id_rsa 是私钥,不能泄露出去, id_rsa.pub 是公钥,可以放⼼地告诉任何⼈。

hyb@139-159-150-152:~$ ls -a .ssh/
. .. id_rsa id_rsa.pub known_hosts

第⼆步:添加⾃⼰的公钥到远端仓库。
在这里插入图片描述
点击 ssh公钥 选项,进⾏设置:
在这里插入图片描述
点击确认后,需要对你进⾏认证,输⼊你的账号密码即可。⾄此,我们的准备⼯作全部做完,欢快的clone吧。

1 hyb@139-159-150-152:~$ git clone git@gitee.com:hyb91/git_teaching.git
2 Cloning into 'git_teaching'...
3 Warning: Permanently added the ECDSA host key for IP address '212.64.63.190' to 
4 remote: Enumerating objects: 4, done.
5 remote: Counting objects: 100% (4/4), done.
6 remote: Compressing objects: 100% (4/4), done.
7 remote: Total 4 (delta 0), reused 0 (delta 0), pack-reused 0
8 Receiving objects: 100% (4/4), done.
9
10 hyb@139-159-150-152:~$ ls
11 gitcode git_teaching 
12 hyb@139-159-150-152:~$ ls git_teaching/
13 README.en.md README.md

done, 成功!如果有多个⼈协作开发,GitHub/Gitee 允许添加多个公钥,只要把每个⼈的电脑上的Key 都添加到 GitHub/Gitee,就可以在每台电脑上往 GitHub/Gitee 上提交推送了。
当我们从远程仓库克隆后,实际上 Git 会⾃动把本地的 master 分⽀和远程的 master 分⽀对应起来,并且,远程仓库的默认名称是 origin 。在本地我们可以使⽤ git remote 命令,来查看远程库的信息,如:

hyb@139-159-150-152:~/git_teaching$ git remote 
origin

或者,⽤ git remote -v 显⽰更详细的信息:

hyb@139-159-150-152:~/git_teaching$ git remote -v
origin git@gitee.com:hyb91/git_teaching.git (fetch)
origin git@gitee.com:hyb91/git_teaching.git (push)

上⾯显⽰了可以抓取和推送的origin的地址。如果没有推送权限,就看不到 push 的地址。推送是什么
意思呢,我们继续往下看。

向远程仓库推送

本地已经 clone 成功远程仓库后,我们便可以向仓库中提交内容,例如新增⼀个 file.txt ⽂件:

# 新建⽂件
hyb@139-159-150-152:~/git_teaching$ ls
README.en.md README.md
hyb@139-159-150-152:~/git_teaching$ vim file.txt
hyb@139-159-150-152:~/git_teaching$ cat file.txt 
hello git
# 提交⽂件
hyb@139-159-150-152:~/git_teaching$ git add .
hyb@139-159-150-152:~/git_teaching$ git commit -m"create file.txt"
[master 7ce3183] create file.txt
 1 file changed, 1 insertion(+)
 create mode 100644 file.txt

提交时要注意,如果我们之前设置过全局的 name 和 e-mail,这两项配置需要和 gitee 上配置的⽤⼾名和邮箱⼀致,否则会出错。
或者从来没有设置过全局的 name 和 e-mail,那么我们第⼀次提交时也会报错。
这就需要我们重新配置下了,同样要注意需要和 gitee 上配置的⽤⼾名和邮箱⼀致。
如何配置已在前文提及,在这⾥就不再赘述。

将本地提交到远端 – git push XXX

到这⾥我们已经将内容提交⾄本地仓库中,如何将本地仓库的内容推送⾄远程仓库呢,需要使⽤ git push 命令,该命令⽤于将本地的分⽀版本上传到远程并合并,命令格式如下:

git push <远程主机名> <本地分⽀名>:<远程分⽀名>
# 如果本地分⽀名与远程分⽀名相同,则可以省略冒号:
git push <远程主机名> <本地分⽀名>

此时我们要将本地的 master 分⽀推送到 origin 主机的 master 分⽀,则可以:

hyb@139-159-150-152:~/git_teaching$ git push origin master
Enumerating objects: 4, done.
Counting objects: 100% (4/4), done.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 308 bytes | 308.00 KiB/s, done.
Total 3 (delta 0), reused 0 (delta 0)
remote: Powered by GITEE.COM [GNK-6.4]
To gitee.com:hyb91/git_teaching.git
 c6ce3f0..7ce3183 master -> master

推送成功!这⾥由于我们使⽤的是 SSH 协议,是不⽤每⼀次推送都输⼊密码的,⽅便了我们的推送操作。
如果你使⽤的是 HTTPS 协议,有个⿇烦地⽅就是每次推送都必须输⼊⼝令。
接下来,看看码云远端:
在这里插入图片描述
代码已经被推送⾄远端了:
在这里插入图片描述

拉取远程仓库

在 gitee 上点击 README.md ⽂件并在线修改它:
在这里插入图片描述
修改内容:
在这里插入图片描述
此时,远程仓库是要领先于本地仓库⼀个版本,为了使本地仓库保持最新的版本,我们需要拉取下远端代码,并合并到本地。

远端拉取到本地 – git pull XXX

Git 提供了 git pull 命令,该命令⽤于从远程获取代码并合并本地的版本。
格式如下:

1 git pull <远程主机名> <远程分⽀名>:<本地分⽀名>
2
3 # 如果远程分⽀是与当前分⽀合并,则冒号后⾯的部分可以省略。
4 git pull <远程主机名> <远程分⽀名>

使⽤⼀下:

# 拉取远程分⽀,并与当前分⽀进⾏合并
hyb@139-159-150-152:~/git_teaching$ git pull origin master
remote: Enumerating objects: 5, done.
remote: Counting objects: 100% (5/5), done.
remote: Compressing objects: 100% (3/3), done.
remote: Total 3 (delta 1), reused 0 (delta 0), pack-reused 0
Unpacking objects: 100% (3/3), 1.02 KiB | 1.02 MiB/s, done.
From gitee.com:hyb91/git_teaching
 * branch master -> FETCH_HEAD
 7ce3183..60e6b0a master -> origin/master
Updating 7ce3183..60e6b0a
Fast-forward
 README.md | 2 ++
 1 file changed, 2 insertions(+)
hyb@139-159-150-152:~/git_teaching$ cat README.md
...
第⼀次修改内容

我们发现,拉取成功了!
在这里插入图片描述

### 回答1: 使用PyTorch的TensorDataset可以将数据集转换成PyTorch可以处理的数据类型,即Tensor。同时,TensorDataset还可以方便地将多个Tensor组合成一个数据集,这对于多模态数据或者多任务学习非常有用。此外,使用TensorDataset可以方便地进行批量读取数据,提高数据读取的效率。因此,使用TensorDataset可以方便地将数据集转换成PyTorch可以处理的数据类型,并且提高数据读取的效率。 ### 回答2: 我们需要使用PyTorch的TensorDataset来定义我们自己的数据集有以下几个原因: 1. 数据集的封装:TensorDataset可以将多个Tensor对象打包成一个数据集,方便数据的管理和使用。我们可以通过它来构建包含输入和标签的数据集,这样在后续的模型训练和评估过程中能够方便地访问到输入和对应的标签。 2. 数据集的扩展性:TensorDataset可以用于处理多种类型的数据,包括图像、文本、语音等。我们可以将不同类型的Tensor对象组合成一个TensorDataset,使得我们能够在同一个数据集中处理多种数据类型,提高数据集的多样性和扩展性。 3. 数据集的切割和分割:TensorDataset提供了灵活的方法来切割和分割数据集。我们可以根据需要对数据集进行切割,只使用其中的一部分数据进行训练或测试。同时,我们还可以将数据集分割成多个部分,在训练过程中进行交叉验证,提高模型的泛化能力。 4. 数据集的兼容性:TensorDataset与PyTorch的其他功能和模块相互兼容,可以无缝地与PyTorch的数据加载器(DataLoader)、模型(Model)和优化器(Optimizer)等进行集成。这样我们可以方便地使用PyTorch的各种功能和方法进行数据处理、模型训练和优化。 总之,使用PyTorch的TensorDataset能够方便地管理和使用我们自己定义的数据集,提高数据集的灵活性和扩展性,同时与PyTorch的其他功能和模块相互兼容,使得我们能够更加方便地进行模型训练和优化。 ### 回答3: 在我们自己定义数据集时使用PyTorch的TensorDataset的主要目的是将我们的数据转换为PyTorch中的Tensor格式,并以数据集的形式组织起来。这样做有以下几个原因: 1. 数据转换:TensorDataset可以将我们的数据转换为PyTorch中的Tensor格式。Tensor是PyTorch中最基本的数据结构,它能够高效地进行数学运算和深度学习计算,同时也支持GPU加速。通过将数据转换为Tensor格式,我们可以充分利用PyTorch的各种优势和功能进行数据处理和模型训练。 2. 数据集组织:TensorDataset可以将我们的数据以数据集的形式进行组织。在深度学习中,我们通常需要将大量的数据组织成批进行训练,这样可以提高模型的训练效率和泛化能力。TensorDataset可以将我们的数据按照批次划分,并提供索引功能,方便我们按需获取和处理批次数据。 3. 数据加载:TensorDataset可以与PyTorch的DataLoader结合使用,方便我们对数据进行高效的加载和并行处理。DataLoader是PyTorch中用于数据加载和预处理的工具,可以实现数据的多进程加载和处理,提高数据加载效率。TensorDataset可以作为DataLoader的输入,提供数据集的输入接口。 4. 数据增强:TensorDataset可以与PyTorch的transforms模块结合使用,方便我们进行数据增强操作。transforms模块提供了各种数据增强的方法,如随机裁剪、随机旋转等。通过将数据转换为TensorDataset,在使用transforms模块对数据进行增强时,可以直接对Tensor进行操作,提高数据增强的效率。 综上所述,使用TensorDataset可以将我们的数据转换为PyTorch中的Tensor格式,并以数据集的形式组织起来,使得我们可以充分利用PyTorch的各种优势和功能对数据进行处理和模型的训练。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值