git在同步到远程库

关于git中多个用户切换的事情:

完全使用账户密码策略连接远程库:

  • 之前一直尝试在本地切换多个用户,发现一直不行,很奇怪?后面发现必须要去win10的凭据管理器删除当前git的凭据。

    以上是输入账户密码,进行凭据校验的情况;

完全使用ssh免登陆策略进行远程库连接:

  • 如果是要通过ssh方式登陆的话,建议还是不要多用户切换了,因为ssh方式免登陆校验的话,每次都要去生成新的ssh密钥去切换,着实太过于麻烦了。

配合账户密码策略和ssh两种策略管理两个账户:

之前还想过,一个用户使用ssh策略,一个用户采取账号密码策略?没有试过,觉得应该可行?

好的,我刚刚去试了一下,这种方式可行,一个账户使用,账户密码策略;一个账户使用ssh免登陆验证。这样可以不用每次修改,就可以同时在本地使用两个账户!

把本地库推送(备份)到远程库上:

这里说的推送到远程库上的步骤都是针对一开始远程库是空的的操作,并不是在远程库已经有分支,把本地库和远程库进行关联!如果要进行关联的话,请查看这篇文章

场景:

在多人协同工作,或者我们把代码托管到第三方平台上的时候,我们要把本地库和远程仓库对应起来。

其实远程库和本地库性质上一模一样,就是一个为了更方便的备份而已!

我们在单机上跑了这么久的git,终于上网啦!

在本地添加远程库

首先在码云上建一个工程,然后在里面复制远程仓库地址:

从上面的图片中可以看出,有两种协议的仓库地址可以选:

一种就是上面说了的https的,一种就是git自己的协议(通过ssh免登陆验证)。

如果要使用ssh登陆:

  1. # 先使用此命令:
  2. ssh -keygen -t rsa -C "邮箱"
  3. ssh-keygen -t rsa -C "3244874077@qq.com"

生成密钥之后,把公钥复制到自己的码云或者github上,然后省略…

添加远程库映射

  1. # 为当前仓库添加一个远程库:git remote add [仓库名] [地址]
  2. git remote add origin https://gitee.com/yaoguai1998/LearnGit.git
  3. # 默认的仓库名是origin,当然你可以根据仓库特征自己取名。
  4. # 上面是https协议的,这种是通过邮箱密码验证的。

这里就引入了git的remote命令了:

下面简单介绍一下remote的相关命令,及一些常用的参数

提醒以下的$符是linux的命令行开始符,不是命令内容

以下遇到origin我们都默认为远程库名,master都默认是主分支名,dev次分支名


  1. # 1.增加
  2. # 添加远程库 git remote add [origin] [url]
  3. # 为当前仓库添加一个远程库:git remote add [仓库名] [地址]
  4. $ git remote add origin https://gitee.com/yaoguai1998/LearnGit.git
  5. # 2.删除
  6. # 删除一个远程库的地址及连接 git remote rm [origin]
  7. $ git remote rm origin
  8. # 3.查看
  9. # 查看当前本地库中添加了几个远程库和名字
  10. $ git remote
  11. learn
  12. origin
  13. # 查看当前的本地库中的远程库的名字,和push(推送),fetch(抓取)地址
  14. $ git remote -v
  15. learn git@gitee.com:yaoguai1998/LearnGit.git (fetch)
  16. learn git@gitee.com:yaoguai1998/LearnGit.git (push)
  17. origin https://gitee.com/yaoguai1998/LearnGit.git (fetch)
  18. origin https://gitee.com/yaoguai1998/LearnGit.git (push)
  19. ## 4.修改url
  20. # git remote set-url [origin] [url]
  21. $ git remote set-url origin git@gitee.com:yaoguai1998/LearnGit.git
  22. # 以上只是remote的常用参数
  23. # 以下为推荐使用:
  24. git remote [-v | --verbose]
  25. or: git remote add [-t <branch>] [-m <master>] [-f] [--tags | --no-tags] [--mirror=<fetch|push>] <name> <url>
  26. or: git remote rename <old> <new>
  27. or: git remote remove <name>
  28. or: git remote set-head <name> (-a | --auto | -d | --delete | <branch>)
  29. or: git remote [-v | --verbose] show [-n] <name>
  30. or: git remote prune [-n | --dry-run] <name>
  31. or: git remote [-v | --verbose] update [-p | --prune] [(<group> | <remote>)...]
  32. or: git remote set-branches [--add] <name> <branch>...
  33. or: git remote get-url [--push] [--all] <name>
  34. or: git remote set-url [--push] <name> <newurl> [<oldurl>]
  35. or: git remote set-url --add <name> <newurl>
  36. or: git remote set-url --delete <name> <url>
  37. -v, --verbose be verbose; must be placed before a subcommand

推送到远程库

  1. # git push [仓库名] [分支名]
  2. # 这里的意思是推送主分支,master分支,origin也是默认的仓库名
  3. $ git push origin master
  4. # 也可以这样,意思是仓库名和分支名不是绝对的
  5. # 把 dev分支,推送到仓库地址映射名为gitlearn的远程仓库上
  6. $ git push gitlearn dev
  7. # 第一次推送到远程库的master上,我们建议是加上 -u 参数的
  8. # 加上-u参数,如果远程库不存在此分支的话,就会创建此分支
  9. $ git push -u origin master
  10. # 有时候在码云上初始了远程库,其中的master分支已经初始化好了,所以可能要导致此时无法push上
  11. # 在这种第一次推送,并且仓库是几乎空白的情况下,无法推送的话,我们可以加上--force参数
  12. $ git push --force origin master
  13. # 或者这种形式
  14. $ git push -u origin master -f

从远程库上拉取

git clone

  1. # git clone [url]
  2. # 克隆有三个效果:
  3. # 1.完整下载远程库
  4. # 2.创建本地库并设定别名:origin (并绑定地址)
  5. # 3.初始化本地库:(.git目录)
  6. # 所以建议,如果我们是初始化本地库的话,不要使用pull命令
  7. # 直接使用clone命令,省去了很多麻烦
  8. $ git clone https://gitee.com/yaoguai1998/LearnGit.git
git fetch
  1. # 把远程库上的master分支的内容抓取到本地
  2. git fetch origin master

因为fetch只是把内容从远程库中抓取下来,还没有做合并的动作(merge),所以在fetch之后,vim本地文件,是看不到修改的。

只有通过:git checkout origin/master操作(git checkout 本地库名称/分支名称),才能切换到fetch下来的分支中去,然后才能看到修改

(我猜想这个是切换到版本库中master中的,因为我们的内容被fetch下来之后应该放到本地库中)

如果要切换回去的话,要通过git checkout master 我觉得这个是切换到工区中的master中,那么其实区别就出来了!

  1. # 切换到本地库中的分支的话:git checkout 版本库名字/分支名字
  2. $ git checkout origin/master
  3. # 切换到工作区中的分支的话:git checkout 分支名称
  4. $ git checkout master

通过fetch操作,只是将远程库中的内容拉取到了本地,但是其实还没有和本地的内容进行合并:其实通过 [远程库名/分支名] 的形式,就是表明是远程库的分支(后面我们操作远程库和本地库的分支建立追踪关系时,远程库的名字就是这样表示的)。

建立分支与分支之间的追踪关系

上面说到远程库和本地库的分支之间建立追踪关系,这里就顺便说明一 下,什么是追踪关系:

在我们上面进行push、fetch以及后面的pull等等和远程库进行交互的操作的时候,我们都会加上分支名称:例如git push origin master、git fetch learngit dev等等,这样每次都需要写后面的分支名称和远程仓库名称,但是我们很多时候就是想推送我们当前所处的分支,远程库其实也就是固定的那一个或者两个,所以追踪关系就是为了解决这样一点的,如果我们建立的本地分支和远程库的分支的追踪关系的话,那么当我们push、pull的时候,就可以省略分支名称,默认就是当前分支和设定的远程分支进行推送和拉取!

如果不建立追踪关系直接:git push的话

  1. # 直接就失败了
  2. $ git push
  3. fatal: The current branch master has no upstream branch.
  4. To push the current branch and set the remote as upstream, use
  5. git push --set-upstream origin master

查看本地库的分支和远程库的分支的映射关系: git branch -vv

  1. # 查看本地库的分支和远程库的分支的映射关系: branch -vv
  2. $ git branch -vv
  3. dev d62c9e1 dev 上提交readme.txt
  4. issue a278fe9 issue中修改了LICENSE
  5. * master 434cab2 解决冲突
  6. # 发现以上的分支和远程库的分支的都没有建立追踪关系
  7. # 这里尝试给issue和远程库的origin/issue建立追踪关系
  8. # 首先切换到issue分支
  9. $ git checkout issue
  10. Switched to branch 'issue'
  11. # 通过两种方式建立本地分支和远程分支的追踪关系
  12. # 1.git branch -u [仓库名]/[分支名]
  13. # 2.git branch --set-upstream-to [仓库名]/[分支名]
  14. $ git branch -u origin/issue
  15. Branch 'issue' set up to track remote branch 'issue' from 'origin'.
  16. # 再通过:git branch -vv 查看追踪关系,发现issue已经有了
  17. $ git branch -vv
  18. dev d62c9e1 dev 上提交readme.txt
  19. issue f3528d7 [origin/issue] issue中修改了LICENSE
  20. master 434cab2 解决冲突
  21. * mzy f3528d7 issue中修改了LICENSE
  22. # 修改文件之后,git commit 之后,直接git push 发现追踪关系已经生效
  23. $ git push
  24. Enumerating objects: 5, done.
  25. Counting objects: 100% (5/5), done.
  26. Delta compression using up to 4 threads.
  27. Compressing objects: 100% (3/3), done.
  28. Writing objects: 100% (3/3), 324 bytes | 324.00 KiB/s, done.
  29. Total 3 (delta 1), reused 0 (delta 0)
  30. remote: Powered by Gitee.com
  31. To gitee.com:yaoguai1998/LearnGit.git
  32. f3528d7..39a6ce1 issue -> issue
  33. # 切断掉联系:git branch --unset-upstream
  34. $ git branch --unset-upstream
  35. # 通过git branch -vv 发现追踪关系已经不存在了!
  36. $ git branch -vv
  37. dev d62c9e1 dev 上提交readme.txt
  38. * issue 39a6ce1 修改了LICENSE
  39. master 25478c7 修改了readme.txt
  40. mzy f3528d7 issue中修改了LICENSE
git merge

回到正题:

前面我们说fetch只能抓取到本地库中,但是并没有在我们的工作区中体现,所以我们要手动进行一个本地库和我们工作区中的分支进行merge的操作!

  1. # 首先切换回我们的master分支
  2. $ git checkout master
  3. # 首先把远程库中的东西拉取下来
  4. $ git fetch origin/master
  5. # 现在我们去合并版本库中的master:
  6. $ git merge origin/master

以上这样才完成了本地库和远程库的合并

git pull

pull,其实就是fetch和merge的合并操作,一个pull其实就是把fetch和merge全都做了,如果你的程序不复杂,并且协同不那么麻烦,最好还是使用pull操作,来简化你的繁琐的过程。

  1. # 首先把远程库中的东西拉取下来
  2. $ git fetch origin/master
  3. # 现在我们去合并版本库中的master:
  4. $ git merge origin/master
  5. # 等同
  6. # git pull [仓库名] [分支名]
  7. $ git pull origin master
  8. # 如果使用了追踪的话,我们在当前分支上就可以直接
  9. $ git pull

mzy git学习,git推送到远程库(八)的更多相关文章

  1. 记一次使用commit提交大文件无法推送到远程库解决问题过程及git rebase使用

    记一次使用commit提交大文件无法推送到远程库解决问题过程及git rebase使用 目录 大文件无法push到远程仓库 问题 commit的大文件无法push到远程库解决办法 git filter ...

  2. Git学习笔记(三)远程库(GitHub)协同开发,fork和忽略特殊文件

    远程库 远程库,通俗的讲就是不再本地的git仓库!他的工作方式和我们本地的一样,但是要使用他就需要先建立连接! 远程库有两种,一个是自己搭建的git服务器:另一种就是使用GitHub,这个网站就是提供 ...

  3. Git把本地代码推送到远程github仓库

    运用Git版本控制系统进行代码的管理,以便于团队成员的协作,由于之前是使用svn来进行版本控制,所以对于Git使用还有待熟练掌握.Git与svn类似,个人认为两者之间比较直观的区别就是 Git 不需要 ...

  4. git 本地项目推送至远程仓库

    1 在本地文件夹下创建一个 Git 仓库(如test目录下) git init 2 此时test文件夹即是你的maste主分支,你可以在改文件夹下写自己的项目 3 将test文件夹下的内容提交至暂存区 ...

  5. git本地分支推送到远程分支

    1.创建的创建和初始化 创建git仓库可以在远端创建一个仓库, 然后check到本地,在本地的文件里创建工程文件,然后提交 也可以将本地现有的工程和远端的空仓库关联 本地创建了一个工程 iOSDemo ...

  6. 如何把已有的本地git仓库,推送到远程新的仓库(github private)并进行远程开发;

    最近因为疫情,在家干活,连接不上之前的gitlab 服务器:所以不得把现有的代码迁移到github 的私有仓库来进行开发:下面简要记录迁移的过程: 首先,确保你已经配置好本地访问远程私有仓库的所有权限 ...

  7. [Git] Git把Tag推送到远程仓库

    转载: http://blog.csdn.net/hustpzb/article/details/8056518 用git tag来给工程打上标签,但是这个命令只是在本地仓库打标签而已, 为了能把标签 ...

  8. Git把Tag推送到远程仓库

    # 创建附注标签 $ git tag -a v0.1.2 -m “0.1.2版本” 列出标签 $ git tag # 在控制台打印出当前仓库的所有标签 $ git tag -l ‘v0.1.*’ # ...

  9. git 本地项目推送到远程服务器

    3进入本地电脑的将要上传的项目的目录下面 1)git  init 初始化一个git 2) vim .gitignore 新增以及编写这个文件 node_modules/ 意思就是上传的时候忽略这个文件 ...

随机推荐

  1. WinForm使用DataGridView实现类似Excel表格的查找替换

    在桌面程序开发过程中我们常常使用DataGridView作为数据展示的表格,在表格中我们可能要对数据进行查找或者替换. 其实要实现这个查找替换的功能并不难,记录下实现过程,不一定是最好的方式,但它有用 ...

  2. Java项目调试技巧及版本控制

    开发项目中,调试是必不可少的. 本篇博客从以下4个方面介绍项目调试技巧: 响应状态码的含义 服务端断点调试技巧 客户端断点调试技巧 设置日志级别,并将日志输出到不同的终端 以及,最后简单的介绍了一下g ...

  3. ajax原理及应用(十六)

    前言 AJAX即"Asynchronous Javascript And XML",是指一种创建交互式网页应用的网页开发技术.AJAX 是一种用于创建快速动态网页的技术.它可以令开 ...

  4. Linux虚拟机与主机网络连接配置与文件传输

    网络配置 对于VMware虚拟机 1. 设置linux系统的网络配置,如下(NAT为默认配置,这里采用这一配置) 2. 主机中配置本地连接-属性-共享-勾选红框配置项,如下:     3.重启虚拟机. ...

  5. Java文件I/O简单介绍

    目录 一.File类 1.1 构造方法 1.2 常用方法 1.3 例子 二.基础I/O:字节流.字符流 2.1 字节流 2.1.1 字节输出流 OutputStream 2.1.2 FileOutpu ...

  6. Typora PicGo Gitee博客写作好搭档

    利用Gitee仓库存放图片 1.首先在Gitee上创建一个公开的仓库,我这里创建了一个名叫resources的仓库: 2.在Gitee中获取私人令牌(个人设置界面中): 安装配置PicGo 1.下载自 ...

  7. 当鼠标移入div上时,div的背景色在4s之内渐变为灰色,同时在5s之内顺时针旋转45度,且尺寸缩小一半;当鼠标移走时,再渐变恢复初始样式

    <style> #d1{ width:200px; height:200px; border:1px solid #000; transition:background 4s linear ...

  8. html拖动元素排序(插件版)

    1 <!DOCTYPE html> 2 <html> 3 <head> 4 <meta charset="utf-8"> 5 < ...

  9. Windows协议 LDAP篇 - Actite Directory

    LDAP简介 先说下ldap,轻量目录访问协议.LDAP就是设计用来访问目录数据库的一个协议.也就是为了能访问目录数据库,ldap是其中一种协议 LDAP的基本模型 目录树:在一个目录服务系统中,整个 ...

  10. 月薪60k,仍无人问津,腾讯阿里到底有多缺这类程序员?

    不知道大家发现没,近几年,国内对音视频人才需求越来越大了,在某招聘网站上居然薪酬高达60k. 从未来的大趋势来看,随着5G时代的到来,音视频慢慢变成人们日常生活中的必须品.除了在线教育.音视频会议.即 ...