无锡建设工程项目代码申请网站,湖南建筑信息平台,公司注册资金认缴是什么意思,安阳网站建设首选爱在地图上剥落#xff0c;我离孤单几公里~ 我们目前所说、所学的内容#xff08;工作区、暂存区、版本库#xff09;都只是存在于本地上#xff0c;也就是说你的一台机器上只有这么一个你维护的版本库。可是Git是一个分布式版本控制系统#xff0c;这又是什…
爱在地图上剥落我离孤单几公里~ 我们目前所说、所学的内容工作区、暂存区、版本库都只是存在于本地上也就是说你的一台机器上只有这么一个你维护的版本库。可是Git是一个分布式版本控制系统这又是什么意思呢 ——前言 一、远程操作
(1) 如何理解分布式版本控制系统 可以理解为每个在这个系统中的机器都有一份完整的版本库。这样在你工作的时候就不需要联网了因为你自己硬盘上就有一份版本库。由此如果涉及到多人协作开发就需要互相彼此推送修改状态让对方看到。 分布式版本控制系统的安全性要⾼很多因为每个⼈电脑⾥都有完整的版本库某⼀个⼈的电脑坏掉了不要紧随便从其他⼈那⾥复制⼀个就可以了。 在实际使⽤分布式版本控制系统的时候其实很少在两⼈之间的电脑上推送版本库的修改因为可能你们俩不在⼀个局域⽹内两台电脑互相访问不了。因此分布式版本控制系统通常也有⼀台充当“中央服务器”的电脑但这个服务器的作⽤仅仅是⽤来⽅便“交换”⼤家的修改没有它⼤家也⼀样⼲活只是交换修改不⽅便⽽已。 (2) 远程仓库介绍 Git是分布式版本控制系统同⼀个Git仓库可以分布到不同的机器上。可是怎么分布呢你说分布就分布 最早肯定只有⼀台机器有⼀个原始版本库此后别的机器可以“克隆”这个原始版本库⽽且每台机器的版本库其实都是⼀样的并没有主次之分。 实际情况是需要找一台计算机当服务器的角色每天24⼩时开机其他每个⼈都从这个“服务器”仓库克隆⼀份到⾃⼰的电脑上并且各⾃把各⾃的提交推送到服务器仓库⾥也从服务器仓库中拉取别⼈的提交。不过好在现实中已经有这样的服务器存在,就像国外的神奇网站:GitHub。但该网站的服务器在国外所以访问很慢有时候甚至访问不到。所以本次演示是用国内的码云替代。 新建仓库: 创建成功后我们可以对远程仓库进⾏⼀个基本的设置开源or私有。 克隆远程仓库: 克隆/下载远端仓库到本地需要使⽤ git clone 命令后⾯跟上我们的远端仓库的链接远端仓库的链接可以从仓库中找到选择“克隆/下载”获取远程仓库链接: SSH协议和HTTPS协议是Git最常使⽤的两种数据传输协议
● SSH协议使⽤了公钥加密和公钥登陆机制体现了其实⽤性和安全性使⽤此协议需要将我们的公钥放上服务器由Git服务器进⾏管理。
● 使⽤HTTPS⽅式时没有要求可以直接克隆下来。 使用https方式: 使用ssh方式: 选用ssh渠道进行复制。 正如我们预期一样使用ssh不能这样clone远端仓库。 使⽤SSH⽅式克隆仓库由于我们没有添加公钥到远端库中服务器拒绝了我们的clone链接。需要我们设置⼀下: ● 创建SSH Key。在⽤⼾主⽬录下看看有没有.ssh⽬录如果有再看看这个⽬录下有没有 id_rsa 和 id_rsa.pub 这两个⽂件如果已经有了可直接跳到下⼀步。如果没有需要创建。 # 创建命令
ssh-keygen -t rsa -C xxxxqq.com(注意填写自己的git上的默认邮箱) 此时只需要一路回车等待过程结束。 顺利的话可以看到.ssh目录下⾥⾯有 id_rsa 和 id_rsa.pub 两个⽂件。这两 个就是SSHKey的秘钥对 id_rsa 是私钥不能泄露出去 id_rsa.pub 是公钥可以放⼼地告 诉任何⼈。 显然秘钥对是一个很长的字符串。 ● 添加⾃⼰的公钥到远端仓库。 当然之后你就可以发现会有一把公钥。 如果有多个⼈协作开发GitHub/Gitee允许添加多个公钥只要把每个⼈的电脑上的 Key都添加到GitHub/Gitee就可以在每台电脑上往GitHub/Gitee上提交推送了。 现在我们继续使用ssh的方式出clone远程仓库: 查看远程仓库状态: 当我们从远程仓库克隆后实际上Git会⾃动把本地的master分⽀和“远程的master分⽀”对应起来并且远程仓库的默认名称是origin。
# 查看远程仓库信息
git remote -v
# 查看远程仓库分支
git branch -r
# 打印本地远程仓库分支
git branch -a
# 查看远程与本地分支建立情况
git branch -vv 上⾯显⽰了可以抓取(fetch)和推送(push)的origin的地址。如果没有推送权限就看不到push的地址。推送是什么意思呢 向远程仓库推送: 本地已经 clone 成功远程仓库后我们便可以向仓库中提交内容例如新增⼀个 file.txt ⽂件: 值得注意的是如果我们之前设置过全局的name和e-mail或者从来没有设置过全局的name和e-mail这两项配置需要和gitee上配置的⽤⼾名和邮箱⼀致否则会出错。那么如何进行配置呢这里也就不多说了。 到这⾥我们已经将内容提交⾄本地仓库中如何将本地仓库的内容推送⾄远程仓库呢?
# 该命令⽤于将本地的分⽀版本上传到远程并合并
git push 远程主机名 本地分⽀名:远程分⽀名# 如果本地分⽀名与远程分⽀名相同则可以省略冒号
git push 远程主机名 本地分⽀名:远程分⽀名 注: 因为我们是ssh建立的远程仓库所以在推送操作时是免用户名免密的。反观 https每次推送都需要用户名密码。 推送完成后我们也就可以在远端仓库中看到这一推送信息。 拉取远程仓库: 在gitee上点击README.md⽂件并在线修改它(这里只是为了演示实际中这是一个不好的行为): 此时远程仓库是要领先于本地仓库⼀个版本为了使本地仓库保持最新的版本我们需要拉取下远端代码并合并到本地。
# 从远程获取代码并合并本地的版本
git pull 远程主机名 远程分⽀名:本地分⽀名# 如果远程分⽀是与当前分⽀合并则冒号后⾯的部分可以省略。
git pull 远程主机名 远程分⽀名 这样我们就拉取成功了
(3) 配置Git
忽略特殊文件: 在⽇常开发中我们有些⽂件不想或者不应该提交到远端⽐如保存了数据库密码的配置⽂件那怎么让Git知道呢在Git⼯作区的根⽬录下创建⼀个特殊的 .gitignore ⽂件然后把要忽略的⽂件名填进去Git就会⾃动忽略这些⽂件了。 在创建仓库时可以选择添加该模板这样就不需要从头写 .gitignore ⽂件。如果当时没有选择这个选择在⼯作区创建⼀个也是可以的。 例如如果我们想忽略.so和.ini结尾的所有文件我们需要在.gitignore的内容中添加: 做完这些工作后我们将代码进行提交。 当我们打开远端仓库时我们会发现.ignore里的文件是没有被提交的。 强制添加: 但有些时候你就是想添加⼀个⽂件到Git但由于这个⽂件被 .gitignore 忽略了根本添加不了那么可以⽤ -f 强制添加:git add -f [filename]. 此时我们的远端仓库里就会出现一个被忽略的文件。 命令别名: 举个例子将git status 起一个git st的别名:
git config --global alias.st status
--global 参数是全局参数也就是这些命令在这台电脑的所有Git仓库下都有⽤。如果不加那只 针对当前的仓库起作⽤。 二、标签管理
(1) 创建标签 在Git中打标签⾮常简单⾸先切换到需要打标签的分⽀上:
# 打标签
git tag [tag_name]
# 查看所有标签
git tag
# ⽤-a指定标签名 -m指定说明⽂字
git tag -a [name] -m XXX [commit_id] 默认标签是打在最新提交的 commit 上的,所以我们可以借用“git cat-file -p [commit id]”查看master指向的最新一个版本: 那么如何个历史上的commit id打上标签呢答案是找到历史上的commit id即可。再使用命令: git tag [tag_name] [commit id]。
注意标签不是按时间顺序列出⽽是按字⺟排序的。 (2) 操作标签
查看标签的详细信息:
# 查看标签信息
git show [tagname] 删除标签: 因为创建的标签都只存储在本地不会⾃动推送到远程。所以打错的标签可以在本地安全删除。
# 删除标签
git tag -d [tag_name] 标签推送:
# 推送某个标签到远程
git push origin [tag_name]
# 推送多个标签
git push origin --tags 本地向远端推送: 我们再来看看远端的仓库: 如果标签已经推送到远程要删除远程标签就⿇烦⼀点先从本地删除: 然后从远程删除。删除命令也是push但是格式如下 三、多人协作
(1) 仓库Init 目前咱们完成了以下的几个任务: • 基本完成Git的所有本地库的相关操作git基本操作分⽀理解版本回退冲突解决等 • 申请码云账号将远端信息clone到本地以及推送和拉取。 是时候⼲最重要的⼀件事情了实现多⼈协作开发为了做这件事情我们需要先做⼀些准备⼯作。我们之前已经将项⽬clone到了指定⽬录。我们将之前提交的一些无关紧要的文件干掉留下一个干净的仓库: 我们在Windows环境中模拟你的另一位伙伴。我们在gitcode文件下使用“小乌龟clone这个远程仓库。 在实际开发中一个仓库内会有多么成员因为目前资源有限。如果要进行多人协作开发必须要将⽤⼾添加进开发者⽤⼾才有权限进⾏代码提交。 新建分支: 到此相当于有了两个⽤⼾分别在linux和windows上针对于同项⽬进⾏协作开发我们的准备⼯作到此结束。 ⽬前我们的仓库中只有⼀个master主分⽀但在实际的项⽬开发中在任何情况下其实都是不允许直接在master分⽀上修改代码的这是为了保证主分⽀的稳定。因此接下来我们就得在gitee上创建dev远程分支供我们使用。 新增分支dev。 创建成功的远程分⽀是可以通过Git拉取到本地来以实现完成本地开发⼯作。 此时对于我们而言要做的是查看远程分支(git branch -r): 对远端仓库的分支进行拉取后就可以看到远端的分支。要说明的是 ① 我们也需要在本地创建dev1分支并切换到dev1分支上进行开发。 ② 我们默认拉取master分支时,Git会自动帮我们把 origin/master 和 本地master进行连接。上述操作示例会将本地分⽀dev1和远程dev1分支进⾏关系链接。 对于⼩伙伴要操作的是: 首先建立另外一条分支dev2 协作开发: 现在你和你的小伙伴分别在dev1 、 dev2上进行开发开发什么呢实现一个四则运算的哈数接口吧。
● 基于Linux环境开发的你: 我们来看看远端仓库分支情况: emm很好如我们预期一样代码被提交上来了。 因为你和你的小伙伴约定好了当你写完加法和减法函数后基于这个代码再实现剩余的运算。因此你现在dev1分支下开发完了代码cal.hpp,并且测试是稳定的。因此你会选择将该分支路径上的版本与master分支进行合并 如何理解Pull Reqest: 创建完成后我们就可以在Pull Request集中找到这个请求。 进行分支合并: 别忘了分支合并完成就需要删除当然也包括本地分支 ● 基于Windows环境开发的小伙伴: 至此你的小伙伴需要完成剩下的操作cal.hpp函数实现。 所以得为他创建一个分支dev2进行下一步开发。 推送远端仓库: 我们再来看看我们的远端仓库: 接下来就同之前的操作无异将dev2分支上的代码合并到master分支上。 在合并之前切换到master分支pull一下是个好习惯: 在实际开发中不止你一条分支会进行开发而是多条并行开发的情况居多。 所以更好的做法应该是在合并之前 pull 更新master。 远程分⽀删除后本地gitbranch-a依然能看到的解决办法: 我们会发现远程仓库中已经将分支dev2删除了。 但是本地仓库还是能够查到这条并不存在的分支信息。
# 查看remote地址远程分⽀还有本地分⽀与之相对应关系等信息
git remote show origin # 移除不存在的远程分支
git remote prune origin这样不存在的远端分支被移除了。 本篇到此结束感谢你的阅读。
祝你好运向阳而生~