git随记

what git?

来源linux, 天生分布式的版本控制工具

与svn区别

svn是集中式的

与svn的版本机制不同

​ Git 只关心文件数据的整体是否发生变化,而SVN这类版本控制系统则只关心文件内容的具体差异(git的冲突到文件, svn到行)

​ 这类系统(如SVN)每次记录有哪些文件作了更新,以及都更新了哪些行的什么内容,然而Git 并不保存这些前后变化的差异数据。实际上,Git更像是把变化的文件作快照后,记录在一个微型的文件系统中。每次提交更新时,它会纵览一遍所有文件的指纹信息并对文件作一快照,然后保存一个指向这次快照的索引。为提高性能,若文件没有变化,Git 不会再次保存,而只对上次保存的快照作一链接。

​ 所以git只有一个.git文件, svn每个文件夹下面都有.svn, svn更加适合做excel数据统计类的集中式管理的需求

GIT不需要联网

​ SVN 断开网络或者断开VPN就无法commit代码,但是Git 可以先commit到本地仓库。

​ 长时间不commit代码会丢失大量开发进程的历史纪录。有个比喻是:不能commit就像用word写文档不能save一样危险

Git 的内容完整性要优于SVN

​ 因为Git 在commit(存储在本地)或者push(上传到远程仓库)之前,通过对文件的内容或目录的结构计算出一个 SHA-1哈希值,作为指纹字符串进行内容的校验,并将此结果作为数据的唯一标识和索引,在远处仓库接受到commit的文件之后,会再计算一遍哈希值然后跟传递过来的哈希值做比较,如果不一致,说明文件在传输时变得不完整,或者磁盘损坏导致文件数据损坏。另外在 Git 数据库中的东西都是用此哈希值来作索引,而不是靠文件名

为什么要用Git?

  1. git每台电脑都有一个版本库,可以在本地做版本管理;
  2. 速度快。git的速度远超大部分版本管理系统,包括svn
  3. 强大的分支管理功能
  4. 活跃的开源社区,如最著名的github,国内的gitee

Git与GitHub

​ gitHub是一个面向开源及私有软件项目的托管平台,因为只支持git 作为唯一的版本库格式进行托管,故名gitHub。(hub: 中心)

git 常用命令使用

配置命令

用户信息查看
git config user.name
git config user.email
用户信息设置
git config user.name yourname
git config user.email youremail

通过gittortoise找到配置文件位置

git随记_第1张图片

编辑, 然后另存为地址就是文件的存放位置类

全局配置位置:

"C:\Users\yourname\.gitconfig"

[user]
	name = yourname
	email = *@163.com
[credential]
	helper = manager-core

"D:\Git\etc\gitconfig"

[diff "astextplain"]
	textconv = astextplain
[filter "lfs"]
	clean = git-lfs clean -- %f
	smudge = git-lfs smudge -- %f
	process = git-lfs filter-process
	required = true
[http]
	sslBackend = openssl
	sslCAInfo = D:/Git/mingw64/ssl/certs/ca-bundle.crt
[core]
	autocrlf = input
	fscache = true
	symlinks = false
	editor = \"D:\\\\Program Files (x86)\\\\Notepad++\\\\notepad++.exe\" -multiInst -notabbar -nosession -noPlugin
[pull]
	rebase = false
[credential]
	helper = manager-core
[credential "https://dev.azure.com"]
	useHttpPath = true
[init]
	defaultBranch = main

所以你可以直接手动编辑文件

设置你可以自定义目录

[xx] # git叫做目录
	yy = zz
> git config xx.yy
zz 
> git config xx.yy "ooxx" # 但是不能操作
fatal: not in a git directory

初始化库

git init 让git开始管理这个文件夹,在同级目录下会出现一个隐藏的.git文件。

git init

提交版本

检查版本状态

git status

提交本地

git add ./-A/filename (. 代表所以的新增和修改, -A 新增,修改删除, 所以我们尽量使用-A)

git commit -m comment 
# 二合一步骤
git commit -am comment 加入缓冲区并提交

如果只执行git init后没有执行git commit的话,可以使用一个命令把索引信息删除

git rm --cached

如果你修改了文件名,使用git commit -am 的话,可以也有对应的文件修改记录

​ 虽然git mv 原来的文件名 新文件名可以做到 ,但是提交中一样可以做到,所以mv基本上使用得比较少

忽略文件

​ .gitignore只能忽略那些原来没有被追踪的文件,如果某些文件已经被纳入了版本管理中,则修改.gitignore是无效的。那么解决方法就是先把本地缓存删除(改变成未被追踪状态),然后再提交:

git rm -r --cached
git add -A
git commit -m 'update .gitignore'

补充说明:

  1. “.gitignore”文件的影响范围是它所在的文件夹和所有的子文件夹

  2. 每一个文件夹都可以创建自己的“.gitignore”文件,如果它上层的文件夹也有“.gitignore”文件,这个文件夹也会受到它的影响。

  3. “.gitignore”文件中可以使用“#”字符开头表示注释,文件夹路径是用“/”字符,文件名可以使用通配符“*”,另外还可以使用“!”字符表示排除。

    不使用/既可以是路径,可以是文件, 所以以/结尾的都是路径, 最后一个/后面的既可以是路径也可以是文件

    只能从当前目录开始写路径, 就是说不能使用绝对路径和上级路径

    例如:

    gitig/a

    a文件和a目录都会忽略

    gitig/a/

    只有a目录会被忽略

分支

git branch -a 查看分支
git branch youbranch 创建分支
git checkout newbranch 切换分支

处理冲突

提交两个分支的内容

git commit -am comment

git merge otherbranch 其他分支合并到当前分支, merge只能在本地完成(本地是相对的)

日志

git log

简化成一行

git log --oneline

简化成一行,同时显示分支

git log --oneline --graph
*   3d36fb0 all
|\
| * 4c2f973 main v1.1
* | fe63aaf all
* | 6854d6f dev v1.2
|/
* fb9d691 v0
*   1a244dd v
|\
| * a23d43f dev
* | 648bd04 v1.0

git提交点

在命令行使用gitk可以展示简单的git界面。

gitk命令的位置"D:\Git\cmd\gitk.exe", 所以gitk不是gittortoise命令

gitk

git随记_第2张图片

commit的中的这些字母和数字就是commit节点的标识(比如最新的提交点是 1a244d5)

标签

# 给1a244d5提交打一个标签
git tag -a v1.0 1a244d5

恢复

回退(reset)、反做(revert)

在Git里,有一个HEAD指针指向当前分支(只有一个分支的情况下会指向master,而master是指向最新提交)

git reset的作用是修改HEAD的位置,即将HEAD指向的位置改变为之前存在的某个版本。(比如需要回到到V0.3)

git log --oneline --graph

git随记_第3张图片

使用“git reset --hard 目标版本号”命令将版本回退

git reset --hard ccf4298

git log --oneline --graph

git随记_第4张图片

git revert的作用通过反做创建一个新的版本,这个版本的内容与我们要回退到的目标版本一样,但是HEAD指针是指向这个新生成的版本,而不是目标版本。

使用“git revert HEAD”撤销前一次的commit

git revert HEAD

git随记_第5张图片

​ 看log信息,revert已经把新建了一个提交点9a26e6b,这个点的内容和ccf4298提交点的内容是一样。区别就是新建了一个commit点

Git远程仓库

ssh

生成和配置RAS秘钥

ssh-keygen -t rsa -C [email protected]

配置公钥到github中

本地与远程仓库通讯(使用https的方式,第一次提交时需要输入密码)

git remote add [源名称 源地址]
gti remote [-v] 查看远程连接[详情]
git push --set-upstream original branch
# 可简化
git push -u original branch
git fetch 提取远程仓库(如果服务器有修改,不会到本地)
git merge  合并冲突(如果只是本地或远程一端修改的话,就不会冲突)
git clone  github地址          ---在命令目录下会自动生成一个对应项目的目录
git clone  github地址  文件夹   -- 会在文件夹中clone对应的内容

你可能感兴趣的:(other,git,svn,github)