本地仓库的创建和初始化

直接在对应文件夹下用git init可以初始化一个本地仓库,然后文件夹里会自动生成.git文件夹,该文件夹是隐藏文件夹。这样本地仓库就初始化完成了。

git操作远程仓库

git操作远程仓库无非就是拉取/查看代码、上传代码。首先拉取代码有两条命令可以实现:

  • git pull
  • git clone

这两个的区别,这篇文章有较详细说明。

git clone

命令为:git clone https......,或者使用ssh秘钥,使用ssh秘钥前提是要先在远程仓库增加public key。

git clone之后,它会把远程仓库的整个项目克隆(或者说复制)到当前文件夹,但当前文件夹(test git)仍未初始化,我们点进去复制下来的JNU-Cplusplus-labs,发现他里面已经有.git文件夹了,也就是克隆下来的项目文件夹就是一个git仓库。

我们点进去克隆下来的项目文件夹JNU-Cplusplus-labs,在这里重新打开git bash,输入git config --list查看配置信息,发现他已经连上了远端仓库,可以进行拉取、上传等操作了。只不过我这里示例使用的是https连接,所以要每次输入账号密码,如果clone时使用的是ssh秘钥,就可以方便很多。

git pull

git pullgit pull origin master就是拉取代码的命令(master为指定远端的分支),每次拉取后,都会更新远端仓库到本地。但是和git clone的区别是,git pull前必须先初始化本地仓库,并且连接远端仓库,还要有操作权限(这个待验证)。

也就是说,我们必须先使用git init,先初始化仓库,然后再使用命令git remote add git@......,连接远端仓库,然后才可以使用git pull命令拉取代码。git push上传代码也一样,要建立本地仓库并且连接远端,这个git push中再介绍详细步骤。

  1. git init,初始化仓库
  2. git remote add git@......,连接远端仓库
  3. git pull,拉取代码

总结git pullgit clone的区别:

  • git clone直接把项目仓库从远端克隆下来了,通俗点说就是在操作的文件夹路径下(实例中的test git),把远端仓库的整个文件夹(JNU-Cplusplus-labs)拷进来了。所以当你要操作远端仓库时,还要点进JNU-Cplusplus-labs 文件夹里再打开git bash
  • git pull 就是拉取代码操作,换句话说,只是把远端仓库的代码更新到本地,所以在此之前要确保有本地仓库(初始化),并且连接了远端。git pullgit push都是同步功能(两个方向不同),所以pull后当前路径test git里的内容是JNU-Cplusplus-labs 里面的东西,理解为:test git 文件夹是一个本地仓库,JNU-Cplusplus-labs 文件夹是一个远端仓库 。真正做项目时最好把本地仓库名改为和远端仓库一样,或者先clone,再进行后续的pullpush,这样就可以省去额外的初始化和连接操作。
  • pull,拉取的是代码或文件;clone,克隆的是项目或仓库。这样说应该能帮助记忆理解。
  • 不论pull还是clone,都是针对远端的一个分支。默认是master或main分支,其他指定分支需要在命令后面输入对应参数

git push

pushpull操作类似,一个拉取代码,一个上传提交代码,所以前提必须要有一个本地仓库并且和远端建立了连接。在此前提下,步骤如下:

  1. git add filename.txt,先把文件添加到暂存区,使用git status可以查看暂存区内容
  2. git commit -m “message”,message为本次提交的注释如:“增加xxx功能”。
  3. git push为远端的分支。

此时查看远端就会发现代码已经更新。关于暂存区的知识,可参考这篇文章

git push 的命令格式一般是

git push <远程主机名> <本地分支名>:<远程分支名>

例如:git push origin master:master

当然,一般情况下,我们都不用写后面的,直接 git push 即可。

建议,push之前先pull一下,防止其他成员更新了远端仓库,自己直接push会把那些内容删除。原因是本地仓库没有,push会把远端与本地同步。(这篇文章已验证)

对Git连接GitHub过程的理解

场景:

  1. 我们老师要求作业提交到GitHub上,于是问我们每个人要GitHub账号,添加到项目的团队成员。
  2. 我之前创建的GitHub账号(12345@qq.com)因为不活跃被封了,于是创建了一个新的账号(54321@163.com)
  3. 按照网上所述配置好git,但是由于误操作,配置时把git的user.email设为了之前的12345@qq.com。并且生产SSH秘钥时后面的邮箱也是这个,即命令:ssh-keygen -t rsa -C "12345@qq.com",然后添加到新的GitHub账号(54321@163.com) SSH keys中。
  4. 完成作业后提交,发现提交成功,操作人是12345@qq.com。疑惑,老师并没有添加我这个(12345@qq.com)GitHub账号,为什么我有权限可以提交成功?

经查阅,总结对这个过程中涉及到的邮箱的理解。原文章:对Git用户名与Github账户关系的理解

  • ssh-keygen -t rsa -C "12345@qq.com"

    此处的邮箱最简单,因为他没有任何意义。这只是生成的SSH秘钥的一个标签,SSH秘钥是你的电脑生成的,所以只与电脑相关联(SSH协议只认机器)。因此建议把这里的邮箱改为电脑的标签,以便以后容易记起来该秘钥是对应那台机器。

    为什么要把本机生成的SSH秘钥添加到GitHub上呢?因为添加后,当在本地电脑使用git操作GitHub远程仓库时,由于GitHub账号连接了本地电脑的秘钥,所有会被认为使用对应GitHub账号进行了操作。

  • GitHub账号 (54321@163.com)

    接着上面,如我在本地 push 代码到远程仓库,由于本地电脑与54321@163.com账号关联了(使用SSH通信),所以远程仓库认为是该GitHub账号进行了提交代码操作。同样的,如果我这个GitHub账号没有权限,那么在本地git就不能访问该远程仓库。

    我理解连接远程仓库时的链接(git@github.com:......),只是帮我们本地仓库指定了一个远程的对象,具体访问操作还是看关联的GitHub账号,若GitHub账号没有权限访问操作,则本地也没有权限,只是指定了对象而已。

  • 本地设置的user.email(12345@qq.com)

    这里的邮箱对push等操作没有实际意义的作用,只是一个自报家门的名称而已。通过该邮箱远程仓库才知道本次操作是谁完成的,也就是说,理论上你可以随便设置(不提倡),但最好设成与GitHub账号一致。原参考文章:对给git配置邮箱和用户名的理解

    1、为什么要配置用户名和邮箱?

    因为Git是分布式版本控制系统,所以,每个机器都必须自报家门:你的名字和Email地址(名字和邮箱都不会进行验证),这样远程仓库才知道哪次提交是由谁完成的。你也许会担心,如果有人故意冒充别人怎么办?这个不必担心,首先我们相信大家都是善良无知的群众,其次,真的有冒充的也是有办法可查的。

    2、配置的用户名和邮箱对push代码到远程仓库有什么影响?

    首先,配置的用户名和邮箱对push代码到远程仓库时的身份验证没有作用,即不用他们进行身份验证;他们仅仅会出现在远程仓库的commits里。

    其次,按正常操作来说,你应该配置你的真实用户名和邮箱,这样一来在远程仓库的commits里可以看到哪个操作是你所为。

    最后,这个用户名和邮箱是可以随便配置的(不提倡),如果你配置的邮箱是github里真实存在的邮箱,则commits里显示的是这个邮箱对应的账号;如果配置的邮箱是一个在github里不存在的邮箱,则commits里显示的是你配置的用户名。

通过以上理解,自然不难明白为什么我可以提交作业,并且提交人显示之前被封了的账号。

可以交作业是因为我本地电脑使用SSH协议与当前GitHub账号(54321@163.com)关联,而老师给了我这个账号权限,因此我能够在本地进行相关的远程仓库操作。

由于git配置邮箱时误使用了之前被封的那个账号(12345@qq.com),所以提交人显示12345@qq.com。

git的分支操作

网上教程挺多,以后有空或者使用到了再更。

Git小白入坑总结(部分)的更多相关文章

  1. 研一小白入坑Go (time使用)

    1 package main 2 3 import ( 4 "fmt" 5 "time" 6 ) 7 8 func main() { 9 // 获取当前时间 1 ...

  2. Linux探索之路1---CentOS入坑笔记整理

    前言 上次跟运维去行方安装行内环境,发现linux命令还是不是很熟练.特别是用户权限分配以及vi下的快捷操作.于是决定在本地安装一个CentOS虚拟机,后面有时间就每天学习一点Linux常用命令. 作 ...

  3. 1、 小白带你入坑xamarin系列之环境搭建和准备

    重点提示 由于xamarin发展更新很快 目前教程部分内容已经过时 请注意下载最新版本   2018.05.23 www.xamarin.com 1. 小白带你入坑xamarin系列之环境搭建和准备 ...

  4. ATOM入坑必备插件

    Atom作为Javascript/CSS/HTML等前端编辑器利器,其强大功能依靠各种插件,以下是笔者在入坑阶段,精挑细选总结出的必不可少的插件,熟悉运用这些插件,一定成吨提高生产效率.安装这些插件只 ...

  5. cozmo 入坑日记及开发环境搭建

    前几日,朋友在群里发了一个机器人的小视频,视频里机器人可以对话,可以推箱子,开心以后会哈哈大笑,非常有趣. 详细了解里一下,这是个叫 cozmo 的智能机器人,可以配合 SDK 用 python 编程 ...

  6. Angular 从入坑到挖坑 - Angular 使用入门

    一.Overview angular 入坑记录的笔记第一篇,完成开发环境的搭建,以及如何通过 angular cli 来创建第一个 angular 应用.入坑一个多星期,通过学习官方文档以及手摸手的按 ...

  7. 技术小菜比入坑 LinkedList,i 了 i 了

    先看再点赞,给自己一点思考的时间,思考过后请毫不犹豫微信搜索[沉默王二],关注这个长发飘飘却靠才华苟且的程序员.本文 GitHub github.com/itwanger 已收录,里面还有技术大佬整理 ...

  8. 入坑Java的自学之路

    # 入坑Java的自学之路 ## 基础知识 - 编程语言:Java python c- 基本算法- 基本网络知识 tcp/ip http/https- 基本的设计模式 ------ ## 工具方面 - ...

  9. RoboGuice 3.0 (一)入坑篇

    RoboGuice是什么? 一个Android上的依赖注入框架. 依赖注入是什么? 从字面理解,这个框架做了两件事情,第一是去除依赖,第二是注入依赖.简单理解就是,将对象的初始化委托给一个容器控制器, ...

  10. [SSIS] 在脚本里面使用数据库连接字符串进行查询等处理, 入坑

    入坑.!!!!! SSIS 中dts包 设置的  ADO.Net连接, 在传入脚本的时候, 我要使用 数据库连接,进行数据的删除操作. 于是我使用了 了如下的 代码 使用的是windows 身份验证, ...

随机推荐

  1. Collection 接口及其常用方法

    Collection 接口的特点 Collection接口没有直接实现类,提供了更具体的子接口(如Set和List)的实现.Collection实现类(通常通过其中一个子接口间接实现Collectio ...

  2. 【Docker】离线安装

    离线安装Docker 1.下载docker 离线安装包 ​ 下载地址如下:Index of linux/static/stable/x86_64/ 2.将下载的包上传至服务器上 我这里下载的是20.1 ...

  3. PerfView专题 (第十四篇): 洞察那些 C# 代码中的短命线程

    一:背景 1. 讲故事 这篇文章源自于分析一些疑难dump的思考而产生的灵感,在dump分析中经常要寻找的一个答案就是如何找到死亡线程的生前都做了一些什么?参考如下输出: 0:001> !t T ...

  4. 【技术积累】Java中的常用类【一】

    Math类 Math类是Java中的一个数学工具类,提供了一系列常用的数学方法.下面是Math类的常用方法及其案例: abs() 返回一个数的绝对值. int num = -10; int absNu ...

  5. Spring-Bean(三)

    Bean生命周期配置 init-method:指定类中的初始化方法名称 destory-method:指定类中销毁方法名称 Bean标签配置 <bean id="UserDao&quo ...

  6. Redis从入门到放弃(5):事务

    1.事务的定义 Redis的事务提供了一种"将多个命令打包, 然后一次性.按顺序地执行"的机制. redis事务的主要作用就是串联多个命令防止别的命令插队. 但是,事务并不具有传统 ...

  7. jwt实现token鉴权(nodejs koa)

    为什么需要token 在后台管理系统中,我们通常使用cookie-session的方式用于鉴权,jwt实现token鉴权(nodejs koa) 但这种方式存在着以下问题 比如cookie的容量太小. ...

  8. LabVIEW图形化的AI视觉开发平台(非NI Vision)VI简介

    前言 今天想和大家分享的是:仪酷LabVIEW AI视觉工具包的VI简介,如介绍内容有误,欢迎各位朋友们帮忙纠正~ 一.AI视觉工具包VI简介 已经安装好的AI工具包位于程序框图-函数选板-Addon ...

  9. [ABC141E] Who Says a Pun?

    2023-02-17 题目 题目传送门 翻译 翻译 难度&重要性(1~10):4 题目来源 AtCoder 题目算法 dp,字符串 解题思路 看到求两个完全相同的子串时,我们可以发现其与求最长 ...

  10. 【问题解决】容器部署MySQL的数据在docker commit导出的镜像中丢失

    问题起因 最近公司有个甲方项目参加竞赛,要求在(基于kubeflow/arena)平台上部置应用,可以将MySQL打包在应用一起,也可以分开部署,没有提供volume相关的支持.大意是可以把初始好的数 ...