赞
踩
git是一个免费的、开源的分布式版本控制系统,可以快速高效地处理从小型到大型地各种项目
git占用资源小,具有廉价地本地库,性能优于CVS、等版本控制工具
版本控制是一种记录文件内容变化,以便能够查阅任意版本
公司内部需要版本控制,个人开发过渡到团队开发
集中式版本控制工具
缺点:中央服务器单点故障
分布式版本控制工具
远程服务器宕机,也不会影响代码本地地版本控制
git历史
git和linux都是linux开发的,linux开发成功后就开源了,开源后的linux受到了很多软件开发者的青睐,很多大牛都贡献了自己的代码,在1991年到2002年这十余年时间里,linux本人都是手动合并代码,但是随着linux用户的日益增加,代码越来越多,linux本人的精力有限,2002年bitkeeper授权给linux社区免费使用,bitkeeper是商业软件,由于人道主义精神,授予linux社区免费使用三年,并且明确指出在使用期间不允许对软件进行破解,但是程序员都有很强的好奇心,bitkeeper这个版本控制这么好用,不由得让一些程序员想研究他的底层代码,终于有一天linux社区的一位大牛破解了这个软件,破解就破解了,还在各大论坛上说自己破解了bitkeeper,搞得bitkeeper收回了使用权。
linux想了想,自己不能受制于人,于是花了两周的时候开发了git,一个月后,linux操作系统的版本控制由git进行管理。
林大神就是如此牛逼,让晚辈佩服的五体投地。
git 工作机制
工作区 : 存放代码的文件夹
git add
暂存区: 工作区代码添加到暂存区
git commit
本地库: 暂存区代码提交到本地库
git代码托管中心
代码托管中心是基于网络服务器的远程代码仓库,远程库
git官网下载指定位数的安装包
查看版本
$ git --version
git version 2.28.0.windows.1
设置用户签名
git config --global user.name myusername
git config --global user.email myemail
签名的作用是区分不同的用户,用户的签名信息在每一个版本的信息中能够看到,通过签名信息确定本次提交是谁做的,git首次安装必须设置一下用户签名,否则无法提交代码。
用户签名与github等远程库的账号没有任何关系。
设置完成之后,在C盘下的Users下面的用户目录下,有一个.gitconfig文件夹,里面会出现相应的用户签名信息。
初始化本地库
在一个目录内使用git init 初始化本地库
git init
查看本地库状态
z004abwh@md1wj4bc MINGW64 /d/coder/git demo (master)
$ git status
On branch master (当前分支)
No commits yet (当前还没有提交任何东西)
nothing to commit (create/copy files and use "git add" to track) (没有东西可以提交)
本地库新建一个文件
z004abwh@md1wj4bc MINGW64 /d/coder/git demo (master) $ vim 1.txt z004abwh@md1wj4bc MINGW64 /d/coder/git demo (master) $ cat 1.txt hello world z004abwh@md1wj4bc MINGW64 /d/coder/git demo (master) $ git status On branch master No commits yet Untracked files: (use "git add <file>..." to include in what will be committed) 1.txt nothing added to commit but untracked files present (use "git add" to track)
本地文件添加到暂存区,开始版本控制
z004abwh@md1wj4bc MINGW64 /d/coder/git demo (master)
$ git add 1.txt
warning: LF will be replaced by CRLF in 1.txt.
The file will have its original line endings in your working directory
z004abwh@md1wj4bc MINGW64 /d/coder/git demo (master)
$ git status
On branch master
No commits yet
Changes to be committed:
(use "git rm --cached <file>..." to unstage)
new file: 1.txt
删除暂存区文件,不会删除本地库
z004abwh@md1wj4bc MINGW64 /d/coder/git demo (master)
$ git rm --cached 1.txt
rm '1.txt'
z004abwh@md1wj4bc MINGW64 /d/coder/git demo (master)
$ git status
On branch master
No commits yet
Untracked files:
(use "git add <file>..." to include in what will be committed)
1.txt
nothing added to commit but untracked files present (use "git add" to track)
只是删除暂存区,并不会删除本地工作区内的文件
z004abwh@md1wj4bc MINGW64 /d/coder/git demo (master)
$ ll -a
total 9
drwxr-xr-x 1 z004abwh 1049089 0 Nov 24 20:33 ./
drwxr-xr-x 1 z004abwh 1049089 0 Nov 24 20:30 ../
drwxr-xr-x 1 z004abwh 1049089 0 Nov 24 20:38 .git/
-rw-r--r-- 1 z004abwh 1049089 12 Nov 24 20:33 1.txt
提交本地库,暂存区到本地库
git commit -m "日志信息" afilename
z004abwh@md1wj4bc MINGW64 /d/coder/git demo (master)
$ git commit -m "first" 1.txt
warning: LF will be replaced by CRLF in 1.txt.
The file will have its original line endings in your working directory
[master (root-commit) 4cc4211] first
1 file changed, 1 insertion(+)
create mode 100644 1.txt (100644是git版本号)
z004abwh@md1wj4bc MINGW64 /d/coder/git demo (master)
$ git status
On branch master
nothing to commit, working tree clean
查看提交的详细信息和精简信息
z004abwh@md1wj4bc MINGW64 /d/coder/git demo (master)
$ git reflog
4cc4211 (HEAD -> master) HEAD@{0}: commit (initial): first
z004abwh@md1wj4bc MINGW64 /d/coder/git demo (master)
$ git log
commit 4cc4211363f2ea507712903ee54d9108f2f0b6fb (HEAD -> master)
Author: zhaojianfei0820 <1032162439@qq.com>
Date: Wed Nov 24 20:41:38 2021 +0800
first
修改工作区文件
z004abwh@md1wj4bc MINGW64 /d/coder/git demo (master)
$ vim 1.txt
z004abwh@md1wj4bc MINGW64 /d/coder/git demo (master)
$ git status
On branch master
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git restore <file>..." to discard changes in working directory)
modified: 1.txt
no changes added to commit (use "git add" and/or "git commit -a")
z004abwh@md1wj4bc MINGW64 /d/coder/git demo (master) $ vim 1.txt 修改文件 z004abwh@md1wj4bc MINGW64 /d/coder/git demo (master) $ git status On branch master Changes not staged for commit: (use "git add <file>..." to update what will be committed) (use "git restore <file>..." to discard changes in working directory) modified: 1.txt no changes added to commit (use "git add" and/or "git commit -a") z004abwh@md1wj4bc MINGW64 /d/coder/git demo (master) $ git add 1.txt warning: LF will be replaced by CRLF in 1.txt. The file will have its original line endings in your working directory z004abwh@md1wj4bc MINGW64 /d/coder/git demo (master) $ git commit -m "second" 1.txt warning: LF will be replaced by CRLF in 1.txt. The file will have its original line endings in your working directory [master 551a67a] second 1 file changed, 1 insertion(+), 1 deletion(-) z004abwh@md1wj4bc MINGW64 /d/coder/git demo (master) $ git reflog 551a67a (HEAD -> master) HEAD@{0}: commit: second 4cc4211 HEAD@{1}: commit (initial): first
穿越回历史版本
z004abwh@md1wj4bc MINGW64 /d/coder/git demo (master) $ git reflog 551a67a (HEAD -> master) HEAD@{0}: commit: second 4cc4211 HEAD@{1}: commit (initial): first z004abwh@md1wj4bc MINGW64 /d/coder/git demo (master) $ git reset --hard 4cc4211 HEAD is now at 4cc4211 first z004abwh@md1wj4bc MINGW64 /d/coder/git demo (master) $ git reflog 4cc4211 (HEAD -> master) HEAD@{0}: reset: moving to 4cc4211 551a67a HEAD@{1}: commit: second 4cc4211 (HEAD -> master) HEAD@{2}: commit (initial): first z004abwh@md1wj4bc MINGW64 /d/coder/git demo (master) $ cat 1.txt hello world
通过reflog命令查看历史版本号,通过reset命令回退到历史版本。
git reset --hard “版本号” 可以穿梭到前一个版本或者后一个版本。
git版本穿梭,底层就是移动head指针。
在版本控制中,同时推进多个任务,为每个任务可以创建每个任务的单独分支,使用分支意味着程序员可以把自己的工作从开发主线上分离开来,开发自己分支的时候,不会影响主线分支的运行,分支可以简单理解为副本,一个分支就是一个单独的副本,分支的底层实现是指针的引用。
同时并行推进多个功能开发,提高开发效率。
各个分支在开发过程中,如果一个分支开发失败,不会对其他分支有任何影响,失败的话就直接删除掉。
查看分支
$ git branch -v
* master 4cc4211 first
创建分支
z004abwh@md1wj4bc MINGW64 /d/coder/git demo (master)
$ git branch hot-fix
z004abwh@md1wj4bc MINGW64 /d/coder/git demo (master)
$ git branch -v
hot-fix 4cc4211 first
* master 4cc4211 first
切换分支
z004abwh@md1wj4bc MINGW64 /d/coder/git demo (master) $ git checkout hot-fix Switched to branch 'hot-fix' z004abwh@md1wj4bc MINGW64 /d/coder/git demo (hot-fix) $ git branch -v * hot-fix 4cc4211 first master 4cc4211 first z004abwh@md1wj4bc MINGW64 /d/coder/git demo (hot-fix) $ vim 1.txt z004abwh@md1wj4bc MINGW64 /d/coder/git demo (hot-fix) $ git status On branch hot-fix Changes not staged for commit: (use "git add <file>..." to update what will be committed) (use "git restore <file>..." to discard changes in working directory) modified: 1.txt no changes added to commit (use "git add" and/or "git commit -a") z004abwh@md1wj4bc MINGW64 /d/coder/git demo (hot-fix) $ git add 1.txt z004abwh@md1wj4bc MINGW64 /d/coder/git demo (hot-fix) $ git commit -m "hot-fix first" 1.txt [hot-fix ef4f32d] hot-fix first 1 file changed, 1 insertion(+), 1 deletion(-) z004abwh@md1wj4bc MINGW64 /d/coder/git demo (hot-fix) $ cat 1.txt hello world 12345
把指定分支合并到当前分支上
z004abwh@md1wj4bc MINGW64 /d/coder/git demo (hot-fix)
$ git checkout master
Switched to branch 'master'
z004abwh@md1wj4bc MINGW64 /d/coder/git demo (master)
$ git merge hot-fix
Updating 4cc4211..ef4f32d
Fast-forward
1.txt | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
z004abwh@md1wj4bc MINGW64 /d/coder/git demo (master)
$ cat 1.txt
hello world 12345
代码冲突合并
当两个不同的分支分别修改同一文件,因为代码冲突,所以git是不会自动合并的,需要手动合并代码。
# 在主分支下修改1.txt git checkout master vim 1.txt # 修改完成后保存 # 主分支提交暂存区 git add 1.txt # 提交本地库 git commit -m "master test" 1.txt # 切换到hot-fix分支 git checkout hot-fix # hot-fix分支下修改1.txt vim 1.txt # 修改完成后保存 # hot-fix分支下提交到暂存区 git add 1.txt # 提交到本地库 git commit -m "hot-fix test" 1.txt
这时候切换回主分支
git checkout master
# 在master分支上合并hot-fix分支代码
git merge hot-fix
#Auto-merging 1.txt
#CONFLICT (content): Merge conflict in 1.txt
#Automatic merge failed; fix conflicts and then commit the result.
# git提示有冲突
这时候要手动解决冲突,在主分支下修改1.txt
hello world 12345
<<<<<<< HEAD # 主分支
test master h
======= # 主分支结束位置
hot-fix h
>>>>>>> hot-fix # hot-fix分支
手动编辑文件,删除相应的标记和想要保存的代码
$ cat 1.txt
hello world 12345
test master h
hot-fix h
修改后在主分支再次提交到暂存区
git add 1.txt z004abwh@md1wj4bc MINGW64 /d/coder/git demo (master|MERGING) git commit -m "final test" 1.txt fatal: cannot do a partial commit during a merge. # 提交本地库时不能添加文件名 git commit -m "final test" # 这时切换回hot-fix分支发现不会变更 z004abwh@md1wj4bc MINGW64 /d/coder/git demo (master) $ git checkout hot-fix Switched to branch 'hot-fix' z004abwh@md1wj4bc MINGW64 /d/coder/git demo (hot-fix) $ cat 1.txt hello world 12345 hot-fix h
Github网址:https://github.com/
全球最大的同性交友网站。新世界大门
创建远程仓库
使用github用户名密码登录github,创建仓库即可,这里不做过多声明
创建远程仓库别名
一般远程地址都是一个比较长的url,很难记忆,可以给远程地址起一个别名。
git remote -v # 查看当前所有远程地址别名
git remote add 别名 远程地址 # 给远程地址创建别名
本地仓库代码推送到远程仓库
git push 别名/url 分支名
拉取远程库到本地库
git pull 别名/url 分支名
克隆远程仓库到本地
git clone url
# 1 拉取代码
# 2 初始化本地库
# 3 创建别名
邀请开发者
打开github代码仓库,添加协作开发者。如果不添加开发者,就不能往仓库push代码。
多团队协作开发
团队A:创建一个仓库git-demo
团队B:fork这个仓库到团队B的git-demo
团队B:修改代码并提出pull request
团队A:收到request ,检查代码,如果代码没有问题,执行merge操作
SSH免密登录
z004abwh@md1wj4bc MINGW64 /d/coder/git demo (hot-fix) $ ssh-keygen -t rsa -C 1032162439@qq.com Generating public/private rsa key pair. Enter file in which to save the key (/c/Users/z004abwh/.ssh/id_rsa): Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in /c/Users/z004abwh/.ssh/id_rsa Your public key has been saved in /c/Users/z004abwh/.ssh/id_rsa.pub The key fingerprint is: SHA256:QjglGGEMeMBF/bXrZO72GuZJurCM7FfuRIMjPNNFdpE 1032162439@qq.com The key's randomart image is: +---[RSA 3072]----+ |=+**o .o oo | |.o+ =o .E | | . o o.. . | | . .oo. . | | = +.oS . | | + oo.+ | | .o.=+ | | . o.+.=+o | | .+.o.++=o. | +----[SHA256]-----+
将公钥添加到github账号中
使用ssh链接测试pull和push
官网地址: about.gitlab.com
安装gitlab
参考官网
自定义安装脚本 vim gitlab-install.sh
sudo rpm -ivh /opt/module/gitlab-ce-13.10.2-ce.0.e17.x86_64.rpm
sudo yum install -y curl policycoreutils-python openssh-server cronie
sudo lokkit -s http -s ssh
sudo yum install -y postfix
sudo chkconfig postfix on
curl https://package.gitlab.com/install/repositories/gitlab/gitlab-ce/script.rpm.sh | sudo bash
sudo EXTERNA_URL="http://gitlab.example.com" yum -y install gitlab-ce
给脚本增加执行权限
chmod +x gitlab-install.sh
初始化gitlab服务
gitlab-ctl reconfigure
启动gitlab服务
gitlab-ctl start
# 如需停止
gitlab-ctl stop
通过浏览器登录gitlab
gitlab默认使用root密码,先修改密码,然后登录,主界面与github大致相同,可以创建远程仓库
IDE具有集成git功能,也可以集成github,gitee,gitlab等
由于天朝网络原因,国内建议使用gitee。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。