Git

简介

Git 是一种分布式版本控制系统,广泛用于协同开发和源代码管理.它由Linus Torvalds在2005年创建,最初是为了管理Linux内核的开发而设计的.

Git可以帮助我们实现代码的本地管理和云端同步,本地就是后面的那些基本命令和GUI,云端就通过Git服务器

有以下基本过程

对个人 : 项目文件修改 ->功能完善后add然后commit->连接好远程仓库后push/pull

对团队 : 主要利用分支功能,将不同功能开发创建不同分支.开发好之后合并到一起

下面先介绍Git的目录结构

安装与设置

去Git官方网站下载安装包即可

首先设置你的用户名和邮件地址. 这一点很重要,因为每一个 Git 提交都会使用这些信息,它们会写入到你的每一次提交中,不可更改:

git config --global user.name "John Doe"

git config --global user.email johndoe@example.com

git config --list #查看所有配置

Git目录

当创建了Git项目后一般都有的文件

我们自定义Ignore&attributes来实现特定功能

Git通过.git这个隐藏文件夹来储存我们的各种信息

.gitignore

设置文件的忽略规则

让一些文件不被记入仓库的更改中.常见的情况是编译出的可执行文件或中间文件,不需要也不应当出现在代码仓库里.如:

main.exe #忽略特定文件

*.exe #忽略所有exe

!*.cpp #忽略cpp以外的文件

build/ #忽略这个文件夹

.gitattributes

设置文件的属性,初学可忽略,防止git在文件处理时出错

文本和二进制文件的处理: 可以指定哪些文件是文本文件,哪些是二进制文件,以便 Git 在进行合并等操作时采取不同的策略.例如,可以告诉 Git 对于某个特定类型的文件,应该使用某种特定的合并策略. *.txt -text

*.bin -text

行尾换行符的处理: 可以指定在检出或提交文件时使用的换行符类型,这对于不同操作系统上的协作很有用.例如,可以强制将所有换行符转换为 LF(Unix 格式)或 CRLF(Windows 格式). *.sh eol=lf

*.txt text eol=crlf

合并策略的指定: 可以指定在合并文件时使用的合并策略.这对于处理特定类型的文件的合并冲突很有用. *.docx merge=word

文件特定的语言统计: 通过.gitattributes文件,可以告诉 Git 在统计代码行数时如何处理文件,以避免将二进制文件的内容计入统计. *.png binary

*.java linguist-language=Java

.git

这个目录是 Git 仓库的核心,包含所有的元数据和对象数据库.它通常位于仓库的根目录下,但是默认情况下是隐藏的,即文件名以.开头.不需要用户管理

objects 目录: 用于存储 Git 对象(blob.tree.commit 等).这些对象是 Git 存储文件内容和目录结构的基本单元.refs 目录: 包含指向各个分支(branches)和标签(tags)的引用,这些引用保存了 Git 仓库中各个提交的哈希值.logs 目录: 包含引用的变更历史.例如,logs/refs/heads/ 存储了每个分支的修改历史.hooks 目录: 包含客户端或服务器端的钩子脚本,这些脚本在特定的 Git 事件发生时执行.HEAD 文件: 指示当前所在的分支.通常是一个指向分支引用的符号链接.config 文件: 包含 Git 仓库的配置信息,如用户信息.别名等.index 文件: 包含了当前工作目录状态的缓存信息,即将要提交的文件的信息.

状态

目录内文件用角标来表示状态

符号说明:

正常的:绿色的对号 被修改过的:红色感叹号 新添加的:蓝色的加号未受控的(无版本控制的):蓝色的问号忽略不受控的:灰色的减号删除的:红色的x号 有冲突的:黄色的感叹号 **

Git服务器

用于储存代码

github和gitlab,另外还有国内的gitee,这里不介绍了

Git是一种版本控制系统,是一种工具,用于代码的存储和版本控制.GitHub是一个基于Git实现的在线代码仓库,是目前全球最大的代码托管平台,可以帮助程序员之间互相交流和学习.GitLab是一个基于Git实现的在线代码仓库软件,你可以用GitLab自己搭建一个类似于GitHub一样的仓库,但是GitLab有完善的管理界面和权限控制,一般用于在企业.学校等内部网络搭建Git私服.GitHub和GiLlab两个都是基于Web的Git远程仓库,它们都提供了分享开源项目的平台,为开发团队提供了存储.分享.发布和合作开发项目的中心化云存储的场所.从代码的私有性上来看,GitLab 是一个更好的选择.但是对于开源项目而言,GitHub 依然是代码托管的首选.

命令

创建

init 初始化当前目录为git库

git init

clone 创建在已有的代码基础上

git clone https://github.com/killsime/gitTest.git

修改

提交

add 添加到暂存区

git add file.cpp

git add . #当前目录的所有文件

git add --all #当前目录下的文件以及文件夹内的文件

reset 从暂存区删除

git reset

git reset .

status 查看暂存区

git status

确认暂存区无误后可以进行提交

commit

git commit #弹出文本编辑器,将要提交的取消注释

git commit -m "commit message" #直接提交

git commit --amend #修改上次提交

提交后可进行恢复和删除

回退

回退项目

先git log 查询当前分支提交日志

commit 87908935339fa31e36e97507c28289b352f000d4 (HEAD -> master, origin/master, third)

# head指向当前分支,后面列出了所有分支,如果推送过远程仓库还会像orign这样标注

Author: killsime

Date: Mon Dec 25 19:01:22 2023 +0800

new file: .gitattributes

new file: .gitignore

new file: test.bmp

第一行即为该次commit的hash码,用于回退版本时使用(reset)

git reset 87908#不用全写,只要能区分就好,至少四位

撤回回退

先git reflog查询引用(references)变更日志 ,整个全局的提交,回退,分支切换的日志

# 该次操作目标的提交hash值 分支列表,操作的分支为绿色 当前head 日志索引 描述信息

fd6ed09 (HEAD -> master) HEAD@{0}: reset: moving to fd6e

1c7886b HEAD@{1}: commit: new file: BMP.bmp

fd6ed09 (HEAD -> master) HEAD@{2}: commit (initial): new file: TXT.txt

这是两次提交后reset到第一次提交的日志,可以查看第二次commit的hash

git reset 1c788

分支

branch,用来管理分支,日志种用head来表示当前分支

git branch #查看所有分支

git branch test #创建test分支

git branch -d test #删除test分支

checkout,切换分支,必须在所有的修改被提交后才能切换

git checkout test

合并分支,将test合并到master中,冲突部分以master为准

$ git checkout master

$ git merge test

推送

git remote -v #fetch和push历史

# 添加远程仓库,pb和origin分别是起的昵称,分别使用https和SSH进行添加,一般我们用SSH.二者区别以及SSH建立教程可以看最后

git remote add pb https://github.com/paulboone/ticgit

git remote add origin git@github.com:wihn2021/git-tut.git

# push和pull

git push origin master

git pull origin master

官方文档Git - Book

TGit

因为命令行可能相对门槛较高,所以我们可以通过GUI界面来进行git管理

这里我们使用 TortoiseGit

软件安装好后,就可以右键创建git库了

跟上面Git一样,空的或者从github上克隆

如果克隆提示No supported authentication methods available

需要将TGit中setting->network->ssh client换成git/usr/bin/ssh.exe

其他的类似需要通过命令的操作都可以通过右键菜单来进行了,也不必多唠叨

SSH与HTTPS

对比

二者都是建立加密连接,我们这里选择ssh,具体原因如下

特点/优缺点

**ssh:**一般使用22端口;通过先在本地生成SSH密钥对再把公钥上传到服务器;速度相较慢点

**https:**一般使用443端口;通过用户名/密码授权,可用性比较高;速度相较快点

使用区别

ssh

clone:需要配置ssh key,即要将生成的SSH密钥对的公钥上传至服务器;

push:不需要验证用户名和密码,直接push即可;

http

clone:没有要求,可以直接克隆下来.

push:需要验证用户名和密码.

总结

HTTPS利于匿名访问,适合开源项目,可以方便被别人克隆和读取,push需要登陆

SSH不利于匿名访问,比较适合内部项目,只要配置了SSH公钥极可自由实现clone和push操作.

SSH生成密钥

这里是连接github的教程

打开终端或命令提示符窗口. 输入以下命令,并按回车键执行: ssh-keygen -t rsa -b 4096 -C "your_email@example.com"

提示你输入保存密钥的文件路径,默认为~/.ssh/id_rsa,直接按回车键即可. 提示你输入一个密码,这是可选的,如果你想要为密钥添加密码保护,可以输入一个密码.如果不需要密码保护,直接按回车键跳过. 生成密钥对成功后,终端会显示公钥的路径和指纹.该文件夹下一个公钥(.pub),一个私钥 将公钥复制到剪贴板中: clip < %USERPROFILE%/.ssh/id_rsa.pub

添加公钥,【头像】→【Settings】→【SSH and GPG Keys】→【New SSH Key】,填入上一步的复制的SSHKey,然后【Add SSH Key】

文章来源

评论可见,请评论后查看内容,谢谢!!!
 您阅读本篇文章共花了: