Git小白入坑总结(部分)
本地仓库的创建和初始化
直接在对应文件夹下用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 pull
或git pull origin master
就是拉取代码的命令(master为指定远端的分支),每次拉取后,都会更新远端仓库到本地。但是和git clone
的区别是,git pull
前必须先初始化本地仓库,并且连接远端仓库,还要有操作权限(这个待验证)。
也就是说,我们必须先使用git init
,先初始化仓库,然后再使用命令git remote add git@......
,连接远端仓库,然后才可以使用git pull
命令拉取代码。git push
上传代码也一样,要建立本地仓库并且连接远端,这个git push中再介绍详细步骤。
git init
,初始化仓库git remote add git@......
,连接远端仓库git pull
,拉取代码
总结git pull
和git clone
的区别:
git clone
直接把项目仓库从远端克隆下来了,通俗点说就是在操作的文件夹路径下(实例中的test git
),把远端仓库的整个文件夹(JNU-Cplusplus-labs
)拷进来了。所以当你要操作远端仓库时,还要点进JNU-Cplusplus-labs
文件夹里再打开git bash
。git pull
就是拉取代码操作,换句话说,只是把远端仓库的代码更新到本地,所以在此之前要确保有本地仓库(初始化),并且连接了远端。git pull
和git push
都是同步功能(两个方向不同),所以pull
后当前路径test git
里的内容是JNU-Cplusplus-labs
里面的东西,理解为:test git
文件夹是一个本地仓库,JNU-Cplusplus-labs
文件夹是一个远端仓库 。真正做项目时最好把本地仓库名改为和远端仓库一样,或者先clone
,再进行后续的pull
和push
,这样就可以省去额外的初始化和连接操作。pull
,拉取的是代码或文件;clone
,克隆的是项目或仓库。这样说应该能帮助记忆理解。- 不论
pull
还是clone
,都是针对远端的一个分支。默认是master或main分支,其他指定分支需要在命令后面输入对应参数
git push
push
和pull
操作类似,一个拉取代码,一个上传提交代码,所以前提必须要有一个本地仓库并且和远端建立了连接。在此前提下,步骤如下:
git add filename.txt
,先把文件添加到暂存区,使用git status
可以查看暂存区内容git commit -m “message”
,message为本次提交的注释如:“增加xxx功能”。git push
为远端的分支。
此时查看远端就会发现代码已经更新。关于暂存区的知识,可参考这篇文章
git push 的命令格式一般是
git push <远程主机名> <本地分支名>:<远程分支名>
例如:git push origin master:master
当然,一般情况下,我们都不用写后面的,直接 git push 即可。
建议,push之前先pull一下,防止其他成员更新了远端仓库,自己直接push会把那些内容删除。原因是本地仓库没有,push会把远端与本地同步。(这篇文章已验证)
对Git连接GitHub过程的理解
场景:
- 我们老师要求作业提交到GitHub上,于是问我们每个人要GitHub账号,添加到项目的团队成员。
- 我之前创建的GitHub账号(12345@qq.com)因为不活跃被封了,于是创建了一个新的账号(54321@163.com)
- 按照网上所述配置好git,但是由于误操作,配置时把git的user.email设为了之前的12345@qq.com。并且生产SSH秘钥时后面的邮箱也是这个,即命令:ssh-keygen -t rsa -C "12345@qq.com",然后添加到新的GitHub账号(54321@163.com) SSH keys中。
- 完成作业后提交,发现提交成功,操作人是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小白入坑总结(部分)的更多相关文章
- 研一小白入坑Go (time使用)
1 package main 2 3 import ( 4 "fmt" 5 "time" 6 ) 7 8 func main() { 9 // 获取当前时间 1 ...
- Linux探索之路1---CentOS入坑笔记整理
前言 上次跟运维去行方安装行内环境,发现linux命令还是不是很熟练.特别是用户权限分配以及vi下的快捷操作.于是决定在本地安装一个CentOS虚拟机,后面有时间就每天学习一点Linux常用命令. 作 ...
- 1、 小白带你入坑xamarin系列之环境搭建和准备
重点提示 由于xamarin发展更新很快 目前教程部分内容已经过时 请注意下载最新版本 2018.05.23 www.xamarin.com 1. 小白带你入坑xamarin系列之环境搭建和准备 ...
- ATOM入坑必备插件
Atom作为Javascript/CSS/HTML等前端编辑器利器,其强大功能依靠各种插件,以下是笔者在入坑阶段,精挑细选总结出的必不可少的插件,熟悉运用这些插件,一定成吨提高生产效率.安装这些插件只 ...
- cozmo 入坑日记及开发环境搭建
前几日,朋友在群里发了一个机器人的小视频,视频里机器人可以对话,可以推箱子,开心以后会哈哈大笑,非常有趣. 详细了解里一下,这是个叫 cozmo 的智能机器人,可以配合 SDK 用 python 编程 ...
- Angular 从入坑到挖坑 - Angular 使用入门
一.Overview angular 入坑记录的笔记第一篇,完成开发环境的搭建,以及如何通过 angular cli 来创建第一个 angular 应用.入坑一个多星期,通过学习官方文档以及手摸手的按 ...
- 技术小菜比入坑 LinkedList,i 了 i 了
先看再点赞,给自己一点思考的时间,思考过后请毫不犹豫微信搜索[沉默王二],关注这个长发飘飘却靠才华苟且的程序员.本文 GitHub github.com/itwanger 已收录,里面还有技术大佬整理 ...
- 入坑Java的自学之路
# 入坑Java的自学之路 ## 基础知识 - 编程语言:Java python c- 基本算法- 基本网络知识 tcp/ip http/https- 基本的设计模式 ------ ## 工具方面 - ...
- RoboGuice 3.0 (一)入坑篇
RoboGuice是什么? 一个Android上的依赖注入框架. 依赖注入是什么? 从字面理解,这个框架做了两件事情,第一是去除依赖,第二是注入依赖.简单理解就是,将对象的初始化委托给一个容器控制器, ...
- [SSIS] 在脚本里面使用数据库连接字符串进行查询等处理, 入坑
入坑.!!!!! SSIS 中dts包 设置的 ADO.Net连接, 在传入脚本的时候, 我要使用 数据库连接,进行数据的删除操作. 于是我使用了 了如下的 代码 使用的是windows 身份验证, ...
随机推荐
- ArrayList 扩容机制
ArrayList 基本介绍 ArrayList实现了List接口.它可以存储包括null的任何类型的对象,允许重复元素.ArrayList在内部使用一个数组来存储元素,当元素数量超过数组容量时,Ar ...
- 从钢铁行业数字化管控与超自动化融合,看华为WeAutomate能力进化
文/王吉伟 钢铁行业的数字化转型,历来都是值得探讨的热点话题. 2022年,我国粗钢产量10.13亿吨,占据了全球钢铁供给市场的半壁江山. 这组数据可谓非常抢眼,但仍旧难掩诸多企业的各种经营问题. 钢 ...
- 基于python+django的宠物商店-宠物管理系统设计与实现
该系统是基于python+django开发的宠物商店-宠物管理系统.是给师妹开发的课程作业.现将源码开放给大家.大家学习过程中,如遇问题可以在github咨询作者. 演示地址 前台地址: http:/ ...
- Flutter upgrade 卡死问题
使用 到本地的flutter sdk的目录下 $flutter upgrade --force 降低到指定版本 : $flutter version 1.22.4
- Codeforces Round #771 (Div. 2) A-E
A 代码 #include <bits/stdc++.h> using namespace std; using ll = long long; int p[507]; bool solv ...
- Hexo博客Next6.0版本主题配置(站内搜索、新建404界面、静态资源压缩、底部信息隐藏、各版块透明度修改、字数统计、推荐阅读、博文置顶、阅读进度、在线评论、运行时间)
新建404界面 在站点根目录下,输入hexo new page 404,在默认Hexo站点下/source/404/index.md 打开新建的404界面,编辑属于自己的404界面,可以显示腾讯公益4 ...
- 【技术积累】HTML+CSS+JavaScript中的基础知识【一】
HTML基础标签 <html> 定义HTML文档的根元素. <!DOCTYPE html> <html> <head> <title>My ...
- Kubernetes亲和性学习笔记
欢迎访问我的GitHub 这里分类和汇总了欣宸的全部原创(含配套源码):https://github.com/zq2599/blog_demos 本篇概览 本文是欣宸在学习Kubernetes调度器的 ...
- 如何用windows任务视图管理多个程序,提高.net开发效率
在 Windows 操作系统中,任务栏是一个非常重要的工具栏,用来显示当前正在运行的程序和任务.如果同时运行了很多程序,任务栏上的图标就会变得非常拥挤,不方便管理和切换.为了提高工作效率,可以通过任务 ...
- 【技术积累】Linux中的命令行【理论篇】【七】
atrm命令 命令介绍 atrm命令是Linux系统中的一个命令行工具,用于取消或删除已经安排的at命令.at命令是一种用于在指定时间执行一次性任务的工具. 命令说明 atrm命令的语法如下: atr ...