Loading

git和github的基本使用(2)

哈希算法

  • 可以将明文通过哈希算法生成密文。 可以是普通的文本、音频、视频等文件
  • 使用哈希算法来验证文件的完整性
    • 通过在“远程管理仓库”和“本地”采用哈希算法对相同文件进行加密,如果得到的哈希值不一致则说明 两边的文件不一致;如果哈希值一致则说明两边文件的一致性
    • 比如:tomcat官网中下载tomcat压缩包在本地进行md5加密工具后得到的sha1和官网的一致,说明 文件一致,无损坏的问题

数据管理机制

  • SVN在每次版本提交后会记录增量添加的内容,在回退到指定版本时会将 当前版本的修改+原始文件 拼在一起,这样很好的节约服务器的空间
  • Git是基于快照进行管理,版本中某个文件内容没有变化则会在新的版本中保存着指向上一个版本文件的指针

分支管理机制

SVN创建分支时会将原分支的文件内容进行完全拷贝,效率低;而git创建分支、切换指针时采用的是指针指向的问题,效率高

本地库和远程仓库交互

①创建本地库,并往本地库提交数据

git init
vi h1.txt
git add h1.txt
git commit -m "add h1.txt"

github上创建远程库

备注:先不勾选默认创建的“README”文件,避免冲突

③在本地库中配置远程库地址的别名,方便以后直接进行推送

# 先查看是否有别名
git remote -v
# 为远程库地址起别名  fetch 表示取回;push 表示推送
git remote add origin http://github.com/atguigu2018/huashan.git

④在本地库中往远程库推送

这里的origin就是表示上面github的远程仓库了

# git push 远程库别名 远程库推送的分支
git push origin master

⑤刷新github页面,查看数据是否推送成功

从远程仓库进行克隆

即从远程仓库下载项目到本地

git clone http://github.com/atguigu2018/huashan.git

效果:

  • 将远程库下载到本地
  • 创建origin远程地址别名
  • 同时会初始化本地库,带有.git目录

邀请其他成员进行团队协作

项目经理创建了github的远程仓库,项目经理在没有授权程序员A操作时,程序员A克隆后对本地修改后进行提交,发现报错了。
下面是程序员A的操作:

默认情况下,想要提交到远程库的话需要邀请加入团队后才能提交。

步骤:

  • 项目经理需要在仓库--settings--Manage access--invite a collaborator--输入那个邀请的github账号,然后复制邀请的链接给到程序员A
  • 程序员A登录github,然后将链接打开 接收邀请即可
  • 然后程序员A重新进行push即可





windows10有默认记住账号和密码的功能,如果想需要调整的话,则到 控制面板---凭据管理器--window凭据 删除凭据即可。 为了再同一台电脑上演示两个人上传文件到远程库操作需要进行下面的步骤,删除window凭据

远程库文件更新后进行拉取

当远程库的文件被其他成员进行更新后,但是我们本地库的文件没有更新,我们需要重新拉取远程库的文件。

fetch方式

  1. 抓取远程库的信息。
git fetch origin master

注意:

  • 【他会在本地创建一个origin/master的分支??】
  • fetch只是抓取远程库的内容,而不会改动到工作区的内容
  1. 切换到远程分支,查看抓取的文件内容
git checkout origin/master
cat aa.txt
  1. 切换到master分支,对远程分支进行合并,并查看内容
git checkout master
git merge origin/master
cat aa.txt

pull方式

令狐冲提交本地内容到远程库,岳不群从远程库拉取到本地。

岳不群步骤:

  1. 拉取远程库分支内容
git pull origin master
cat aa.txt

总结

如果不存在冲突的话,则使用pull方式进行拉取远程库代码合并到当前本地库;如果存在冲突,则需要使用fetch先拉取、然后再进行merge合并操作

协同开发时产生的冲突

两个人如果修改了同一个文件的同一位置,只有先推送到远程库的人才能推送,后推送的人就推送不上去,后推送的人必须先拉取下来然后合并才能推送。

比如:岳不群修改文件A后先提交到远程库,而令狐冲修改文件A的同一行提交到远程库就会报错,令狐冲需要解决冲突后才能提送

岳不群操作步骤:

vi hello.txt
git commit -m "add hello.txt" hello.txt   # 直接提交,而无需添加到暂存区
git push origin master

令狐冲操作步骤:

vi hello.txt
git commit -m "test confict" hello.txt   # 直接提交,而无需添加到暂存区
git push origin master  
# 这里本地库落后远程库一个版本,远程库不允许提交

# 先下拉合并代码
git pull origin master
vim hello.txt
# 手动解决冲突
git commit -m "resolve confict"  //注意:这里不能带文件名进行提交【因为可能要commit多个文件,所以不用带文件名】
git push origin master
  • 备注:github是根据hash值来判断本地库和远程仓库中是否为同一个版本,如果不是同一个版本则不允许进行更新操作

跨团队协作

A项目外包给其他公司,其他公司需要安排人去解决这个问题,那么A项目就需要外包公司安排人先去fork之后然后提出pull request,然后由A项目的负责人进行合并操作

外包公司的人操作:


SSH免密登录

默认情况下win10控制面板中的"凭据管理器"会自动保存用户的账户和密码;github项目提供了两种方式来链接项目,一种是http、一种是ssh。使用http默认是无法保存登录状态的。
如果window没有提供自动保存密码的功能,我们可以使用ssh方式来进行免密登录。

# 使用ssh-keygen命令生成 id_rsa.pub和

# 修改本地库的文件然后进行提交

# 使用ssh方式进行推送	
# 新增远程别名
git remote add origin_ssh git@xxx
git push origin_ssh master

分支实战

项目经理安排程序员A去修复master分支中的bug,程序员A新建分支,程序员经过本地测试通过后往远程库的master分支进行推送,项目经理下拉代码到本地,检查功能,功能通过后通过代码的合并,然后再往远程库的master分支进行推送

程序员操作:

git branch hot_fix
vi hello.txt
git commit -m "fix bug on hello.txt"
git push origin hot_fix

项目经理操作:

git pull orgin
# 切换到hot_fix分支验证bug是否修复
git branch hot_fix
# 验证通过则在master分支对hot_fix分支进行合并
git branch master
git merge hot_fix

gitlab

  • github主要给社区用的,企业有些为了安全管理,选择内网部署gitlab;
  • gitlab是局域网的代码托管中心,不受外网的控制
posted @ 2021-09-06 08:26  ^Mao^  阅读(135)  评论(0编辑  收藏  举报