分布式管理工具git
别人的总结是别人,自己学习完要有自己的心得体会。
Git是 分布式 版本控制系统,不管可以管控代码,其他类型的文件也一样可以进行版本控制,很方便多人协作的情况。有点类似与现在的 WPS在线文档 ,是不过WPS是实时的,而Git相当于在线下做完在上传线上,达到同样的效果。
所谓分布式管理,就是代码的管理不依赖于中心服务器,每台终端都可以是代码服务器,这样极大降低了代码丢失的风险。
一、Git安装配置
工欲善其事必先利其器,相对于windows系列的下一步下一步的安装,我们着重看下Ubuntu环境下的Git安装与配置吧。【GitHub示例】
1. Git安装
## 哈哈,很简单! sudo apt-get install git
2. Git版本库配置
# 创建仓库repository目录 mkdir MySpace cd MySpace touch test.txt touch test.doc # 初始化仓库,然后这个仓库下的所有文件都会被git监视 git init ls -ah # 将文件添加到暂存区stage git add test.txt test.doc # 或 git add . # 将文件提交到仓库,-m 后面是提交的备注信息 git commit -m "add test.txt file" # 上面两步可以合并成一步操作,它会自动跟踪并提交有修改的文件;一般不推荐这种方法,因为它不能将文件添加到git管理里的 git commit -a "add test.txt file" # 先GitHub推送需要先添加ssh-keygen cd ~/.ssh ssh-keygen cat ~/.ssh/id_rsa.pub # 将仓库里的数据提交到远程仓库(如:GitHub) # GitHub中https://github.com/new新建远程仓库 # 将本地仓库与远程仓库关联 git remote add origin git@github.com:Crisimple/test_repository.git # 把本地库的所有内容推送到远程库上 git push -u origin master # 首次向远程仓库推送加-u # 从远程库克隆数据 git clone git@github.com:crisimple/test_repository.git git clone https://github.com/crisimple/test_repository.git # 速度慢每次推送还得输入口令,不建议使用
二、后悔药
【GitHub示例】
1. 版本回退
# 1.版本回退 # 1.1. 查看提交日志 git log # 简化输出信息 git log --pretty=oneline # 查看每一次的提交记录,即使是回退的也可以查看 git reflog # ----------------------------------------------------------------------- # 1.2. 回退版本 # 回退到上一个版本 git reset --hard HEAD^ # 回退到指定的版本 git reset --hard commit_id # 撤销到暂存区 git reset --soft HEAD@{1} # 干掉这个修改 git reset --hard HEAD@{1} # 或 git reset HEAD~2
2. 工作区
# 2.1 查看工作区的状态 git status # 2.2 丢弃工作区的文件 git checkout -- test.txt # 2.3 删除文件 git rm test.txt
三、分支管理
在多人协作的项目中,为了避免自己开发的代码与其他人产生冲突,拉出一个分支。
创建一个属于自己的分支,别人看不到,还继续在原来的分支上正常工作,而在自己的分支上干活,先提交就提交,直到开发完毕后,再一次性合并到原来的分支上,这样即安全又不影响别人工作。
1. 创建与合并分支
HEAD指向master(也就是当前分支),master指向提交。
# 创建dev分支,然后切换到dev分支,相当于接下来的两条命令 git checkout -b dev git branch dev git checkout dev # 查看当前分支,当前分支前会标一个 * 号 git branch # 切换到主分支,这时候查看master分支上是没有任何修改的 git checkout master # 将dev分支上的工作成果合并到master上, git merge 用于合并指定分支到当前分支 git merge dev # 合并完dev分支,就可以删除dev分支了 git branch -d dev # git中更科学的切换分支用 switch git switch master # 创建并切换到新的分支上 git switch -c dev
因为创建、合并和删除分支非常快,所以Git鼓励你使用分支完成某个任务,合并后再删掉分支,这和直接在master分支上工作效果是一样的,但过程更安全。
2. BUG分支
软件开发中,bug就像是家常便饭一样。每个不管都可以通过一个新的临时分支来修复,修复后合并分支,然后将临时分支删除。
# 创建新的临时分支的时候,看下当前工作区的状态 git status # 如果当前分支dev上的功能还没开发完毕,那么又需要紧急修复bug,可以将dev的修改存储起来 git stash git status # 确定是在那个分支上修复bug,如果是master分支上修复则从master上创建临时分支 git checkout master git checkout -b issue-101 # 修复bug git add modify_bug.py git commit -m "fix issue 101" # 修复完bug切换到master分支,合并bug分支,再删除issue-101分支 git checkout master git merge --no-ff -m "merge bug fix 101" issue-101 # 恢复 dev 分支的工作进度 git checkout dev git status # 查看刚存储的开发工作 git stash list # 恢复stash里的内容 # git stash apply恢复后,stash内容并不删除,通过git stash drop删除 git stash apply stash@{0} git stash drop # 或者通过git stash pop 恢复的同时会将stash内容删除 git stash pop # cherry-pick命令,将复制一个特定的提交到当前分支 git cherry-pick commit_id
3. Feature分支
添加一个新的功能时,为了不把主分支搞乱。没添加一个新功能,最好新建一个feature分支,再上面开发完成后,合并,最后删除该feature分支。
# 创建并切换至feature分支 git checkout -b feature-vulcan # 在feature分支开发 git add feature_test.py git commit -m "add feature vulann" # 切换到dev,合并分支 git status git checkout dev git merge feature-vulcan # 突然间接到说该功能不用添加了 git branch -D feature-vulcan
4. 多人协作
以大家共同从GitHub上拉取代码开发合并为例。
# 推送分支 git push origin dev # 抓取分支 git pull git@github.com:crisimple/crisimple.git # 本地dev分支上开发,必须创建远程origin的dev分支到本地 git checkout -b dev origin/dev # 查看远程库信息,使用git remote -v; # 本地新建的分支如果不推送到远程,对其他人就是不可见的; # 从本地推送分支,使用git push origin branch-name,如果推送失败,先用git pull抓取远程的新提交; # 在本地创建和远程分支对应的分支,使用git checkout -b branch-name origin/branch-name,本地和远程分支的名称最好一致; # 建立本地分支和远程分支的关联,使用git branch --set-upstream branch-name origin/branch-name; # 从远程抓取分支,使用git pull,如果有冲突,要先处理冲突。
5. 解决冲突
四、标签管理
发布一个版本时,通常先在版本库中打一个标签(tag),这样就唯一确定了打标签时刻的版本。将来无论什么时候,取某个标签的版本就把那个标签使劲儿的历史版本取出来即可。所以标签也是版本库的一个快照,其实它就是指向commit的指针。
Git有commit,为什么还要引入tag?简化记忆,commit对应id太长,用tag v1.1容易记住且有名字有意义。
1. 创建标签
# 切换到要打标签的分支上 git branch git checkout master # 打一个新标签 git tag v1.0 # 查看已打过的所有标签 git tag # 对指定的commit id打标签 git log --pretty=oneline --abbrev-commit git tag v1.1 f53c633 # 查看标签信息 git show v1.1 # 打标签带参数,-a 指定标签名,-m 指定说明文字 git tag -a v1.2 -m "parameter introduction add"
2. 操作标签
# 删除标签 git tag -d v1.1 # 将某个标签的推送到远程 git push origin v1.0 # 一次性推送全部尚未推送到远程的本地标签 git push origin --tags # 删除远程的标签 git push origin :refs/tags/v1.2
五、自定义Git
1. 忽略特殊文件
在git工作区的根目录下创建一个特殊的.gitignore文件,然后把要忽略的文件名填进去,git就会自动忽略这些文件。
echo "要忽略文件的名称" >> .gitignoer # 检查忽略规则 git check-ignore -v app.py # 强制添加某个文件 git add -f app.py
2. 配置别名
简化git的相关命令,可以给原名令起个别名。
git config --global alias st status # 配置查看最后一次提交信息 git config --global alias last 'log -i' # 加上config是针对当前用户生效,如果不加只针对当前的仓库起作用 # 当前仓库的配置文件 cat .git/config # 当前用户的配置文件 cat .gitconfig
六、搭建Git服务器
搭建一套自己的git代码管理仓库。
# 安装git sudo apt-get install git # 创建一个git用户,用来运行git服务 sudo adduser git # 创建证书登录 收集所有需要登录的用户的公钥,就是他们自己的id_rsa.pub文件,把所有公钥导入到/home/git/.ssh/authorized_keys文件里,一行一个。 # 初始化仓库 sudo git init --bare sample.git # 不让用户直接登录到服务器上去改工作区,并且服务器上的Git仓库通常都以.git结尾。然后,把owner改为git sudo chown -R git:git sample.git # 禁用 shell 登录 git:x:1001:1001:,,,:/home/git:/usr/bin/git-shell # 克隆远程仓库 git clone git@server:/srv/sample.git
【推荐】还在用 ECharts 开发大屏?试试这款永久免费的开源 BI 工具!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何在 .NET 中 使用 ANTLR4
· 后端思维之高并发处理方案
· 理解Rust引用及其生命周期标识(下)
· 从二进制到误差:逐行拆解C语言浮点运算中的4008175468544之谜
· .NET制作智能桌面机器人:结合BotSharp智能体框架开发语音交互
· Cursor预测程序员行业倒计时:CTO应做好50%裁员计划
· 想让你多爱自己一些的开源计时器
· 大模型 Token 究竟是啥:图解大模型Token
· 用99元买的服务器搭一套CI/CD系统
· 如何在 .NET 中 使用 ANTLR4