本地仓库的创建和初始化

直接在对应文件夹下用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. Python运维开发之路《python基础介绍》

    一. python介绍相关 1. Python简介 Python 是一个高层次的结合了解释性.编译性.互动性和面向对象的脚本语言. - Python 的设计具有很强的可读性,相比其他语言经常使用英文关 ...

  2. 1 opencv-python图像读写模块

    这个分类记录自己学习opencv的随笔文档,方便以后查询和复习.python-opencv环境配置网上教程很多,此处就不做赘述了,该文档记录opencv最基础的图像读写和显示,工具是jupyter n ...

  3. modulemap的使用方法

    modulemap的作用   modulemap 文件是用来解决 C,Object-C,C++ 代码在 Swift 项目中集成的问题的. 在 Swift 项目中,如果需要使用 C,Object-C 或 ...

  4. Element-ui源码解析(一):项目目录解析

    开始看原码了,我们要开始一些准备工作, 既然是拆代码,那么我们要先把代码搞到手 1.如何下载原码  随便开个项目 npm i element-ui -S 将源码下载到本地 随后在node_module ...

  5. Python和PyTorch深入实现线性回归模型:一篇文章全面掌握基础机器学习技术

    1. 简介 1.1 线性回归模型概述 线性回归是一种统计学中的预测分析,该方法用于建立两种或两种以上变量间的关系模型.线性回归使用最佳的拟合直线(也称为回归线)在独立(输入)变量和因变量(输出)之间建 ...

  6. 3D相册 复仇者联盟

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...

  7. [python]为指定目录下的文件名批量加前缀

    前言 功能描述:批量重命名指定目录下的文件,文件名加前缀,默认格式为"目录名_原文件名". 示例代码 import argparse import os import sys im ...

  8. sqli-labs全通关payload

    less-1: less-2: less-3: less-4: less-5: less-6: less-7: outfile,dumpfile,load_file函数的用法如下所示: less-8: ...

  9. Go 语言中排序的 3 种方法

    原文链接: Go 语言中排序的 3 种方法 在写代码过程中,排序是经常会遇到的需求,本文会介绍三种常用的方法. 废话不多说,下面正文开始. 使用标准库 根据场景直接使用标准库中的方法,比如: sort ...

  10. 《SQL与数据库基础》21. 分库分表(一)

    目录 分库分表(一) 拆分策略 垂直拆分 垂直分库 垂直分表 水平拆分 水平分库 水平分表 技术实现 MyCat概述 概念介绍 环境准备 目录介绍 MyCat入门 配置 分片配置(schema.xml ...