文章目录
- 前言
- 一、git下载与安装
- 二、在github上建一个仓库
- 三、git命令(项目根目录里面)
-
- [3.1 git init](#3.1 git init)
- [3.2 git add .](#3.2 git add .)
- [3.3 git commit -m "initial commit"](#3.3 git commit -m “initial commit”)
- [3.4 git remote add origin [remote repository URL]](#3.4 git remote add origin [remote repository URL])
- [3.5 git push -u origin master](#3.5 git push -u origin master)
- 总结
前言
许久没用,回忆一下,并且提高深度
:在保证一定深度的情况下,保证好广度
一、git下载与安装
二、在github上建一个仓库
三、git命令(项目根目录里面)
3.1 git init
初始化本地库,git的逻辑是在本地项目里面会有一个隐藏的.git文件。是先往.git文件里面输入,最后push到github.com/...
git init会将本地分支默认命名为master,可以通过git branch -m master newname 来进行
git help可以查看各命令
3.2 git add .
当使用 git add 命令将文件添加到暂存区时,Git 会为这些文件生成 blob 对象,即文件内容的快照,并将它们存储在 .git/objects 目录中。此时,index 文件会保存这些文件的引用以及文件的状态信息
git将项目中所有已经更改了的文件放入暂缓区
暂缓区是一个逻辑概念,并不是存入到一个物理的实际上的区域,相当于是将对应的文件添加了一个状态字段,此字段表示暂缓区状态。
git add的时候,git会为所添加的文件生成一个快照,此快照会放到.git/index里面,
index中存储的是关于文件的元数据信息和文件内容的哈希值以及文件状态信息
commit之前的index:
3.3 git commit -m "initial commit"
此命令运行的时候,暂缓区的内容会被打包成一个commit,并且会生成一个tree对象
每个文件夹都有自己的tree对象,是一个嵌套关系
如果项目中有多个目录或子目录,每个目录都会生成自己的 tree 对象,导致 .git/objects/ 中存储多个 tree 对象的文件
Git 中每个 tree 对象都会根据其内容生成一个唯一的哈希值,并将其存储在 .git/objects/ 目录中。
假设一个 tree 对象的哈希值是 24b9da6552252987aa493b52f8696cd6d3b012dd,则该 tree 对象会存储在 .git/objects/24/ 目录下,文件名为 b9da6552252987aa493b52f8696cd6d3b012dd
新的提交对象会被添加到 Git 的历史记录中,形成一条指向之前提交的链。每个提交都有一个唯一的 SHA-1 哈希值,标识该提交。
在完成提交后,Git 会清空暂存区的内容,准备好接受下一次的更改和添加。此时,暂存区不再包含任何文件的状态,因为所有已暂存的文件都已被记录为新的提交。
Git 会根据暂存区的内容生成一个新的提交对象(commit object),其中包含了所有在暂存区的文件快照的哈希值。这些快照代表了在该次提交时所有文件的状态,这个 commit 对象同样会被存储在 .git/objects/ 目录中
commit之后的index:
3.4 git remote add origin [remote repository URL]
连接远程仓库,命名为origin
可以通过git remote -v查看当前远程仓库列表
.git/config 文件:当你执行 git remote add 命令时,Git 会在 .git/config 文件中记录远程仓库信息。
git remote指令只会修改config
.git/refs/remotes/origin/ 目录:这个目录在你进行 git fetch 或 git pull 操作时会被创建和更新,它用于存储远程分支的引用。执行 git remote add 仅仅是添加远程仓库的 URL,暂时不会创建这个目录
3.5 git push -u origin master
git push:
这是 Git 中用于将本地更改上传到远程仓库的基本命令。它将提交的更改从本地分支推送到远程分支。
-u:
-u 是 --set-upstream 的简写。它的作用是将本地分支与远程分支关联起来。
这意味着在未来的推送和拉取操作中,你可以直接使用 git push 或 git pull 而不需要指定远程和分支名称,因为 Git 会记住这两个分支之间的关系。
origin:
origin 是远程仓库的默认名称。通常在克隆仓库时,Git 会自动将原始仓库命名为 origin。这个名称可以是任意的,但 origin 是一种约定俗成的命名方式。
master:
master 是你要推送的本地分支的名称。它是 Git 中的一个默认分支名称(在一些新的 Git 版本中,默认分支可能是 main)
.git/logs/ 文件夹存储的是每次对分支、HEAD 和远程引用的更新日志。它记录了每次提交、推送、拉取等操作的历史。
执行 git push 后,.git/logs/refs/heads/ 和 .git/logs/HEAD 会被更新,因为推送成功后,本地分支的历史操作会记录在这些日志文件中。
.git/logs/HEAD 会记录推送时 HEAD 的状态变化。
.git/logs/refs/heads/main(或你当前所在的分支)会记录推送时分支的状态变化。
总结
最后一步的时候遇到问题:
bash
fatal: unable to access 'https://github.com/cben484/cben-s_benchmark/': gnutls_handshake() failed: The TLS connection was non-properly terminated.
第一步尝试转为ssh私钥公钥连接
mlgb,还是不对
bash
git@github.com: Permission denied (publickey).
搞了半天,看到csdn有人提的
bash
git config --global --unset https.https://github.com.proxy
git config --global --unset http.https://github.com.proxy
神奇的一下子就搞定了