Git代码管理
开源平台:Gogs https://gogs.io/ 国内人开发的,可以在windows/linux多个平台上安装,简单易行
Git Extensions http://gitextensions.github.io/
安装时会带有git bash,记得在安装时勾选右键显示git GUI here和git bash here选项,可以选择使用GUI,也可以使用bash,比较方便
GitKraken: 官方网站:https://www.gitkraken.com/
SourceTree
Github Desktop
Pycharm/VCS/Git:
Pycharm自带的git管理插件,也很好用,带有可视化的log和history,版本比较等等。
# sudo apt-get install git
GitKraken: 官方网站:https://www.gitkraken.com/
GitKraken 是一个跨平台的,优雅和高效用于 Linux 的 Git 客户端。它适用于类 Unix 系统,例如 Linux 和 Mac OS X,以及 Windows。它旨在通过以下功能来提高 Git 用户的工作效率:
视觉交互和提示
100% 单机
支持多个配置文件
支持单点击撤销和重做功能
内置的合并工具
快速和直观的搜索工具
很容易适应用户的工作空间,同时支持子模块和 Gitflow
与用户的 GitHub 的或 Bitbucket 帐户集成
键盘快捷键以及其它更多。
Pycharm/VCS/Git:
Pycharm自带的git管理插件,也很好用,带有可视化的log和history,版本比较等等。
Xcode自带git,Xcode本身需要额外安装
GitKraken: 官方网站:https://www.gitkraken.com/
SourceTree
Github Desktop
Pycharm/VCS/Git:
Pycharm自带的git管理插件,也很好用,带有可视化的log和history,版本比较等等。
- git config --global user.name “用户名”
- git config --global user.email “邮箱”
- 执行生成公钥和私钥的命令:ssh-keygen -t rsa 并按回车3下
- 执行查看公钥的命令:cat ~/.ssh/id_rsa.pub
- 第一步,使用命令git add <file>将工作区的文件添加到暂存区,注意,可反复多次使用,添加多个文件;
- 第二步,使用命令git commit将暂存区的文件提交到当前分支,完成。
- git add命令实际上就是把要提交的所有修改放到暂存区(Stage),然后,执行git commit就可以一次性把暂存区的所有修改提交到分支。每次修改,如果不add到暂存区,那就不会加入到commit中。
- 如果git status告诉你有文件被修改过,用git diff可以查看修改内容。
- HEAD指向的版本就是当前版本,因此,Git允许我们在版本的历史之间穿梭,使用命令git reset --hard commit_id。
- 穿梭前,用git log可以查看提交历史,以便确定要回退到哪个版本。
- 要重返未来,用git reflog查看命令历史,以便确定要回到未来的哪个版本。
- 场景1:当你改乱了工作区某个文件的内容,想直接丢弃工作区的修改时,用命令git checkout -- file(回到上一次git add的状态(用暂存区中的文件替换工作区中的文件),如果没有git add,就回到上一次git commit的状态(用版本库当前分支中的文件替换工作区中的文件))。
- 场景2:当你不但改乱了工作区某个文件的内容,还添加到了暂存区时,想丢弃修改,分两步,第一步用命令git reset HEAD file,就回到了场景1,第二步按场景1操作。
- 场景3:已经提交了不合适的修改到版本库时,想要撤销本次提交,参考版本回退一节,不过前提是没有推送到远程库。
- 命令git rm用于从版本库中删除一个文件(将文件从工作区删除,并添加改动到暂存区,还需要使用git commit命令将删除操作提交到当前分支)(注意,用rm命令是从我们的机器上删除文件,但是这个删除操作git版本库会记录下来,如果我们确实不想要它了,就需要在版本库中也删除这个文件)。如果一个文件已经被提交到版本库,那么你永远不用担心误删,但是要小心,你只能恢复文件到最新版本,你会丢失最近一次提交后你修改的内容。
- 要关联一个远程库,使用命令git remote add origin git@server-name:path/repo-name.git;关联后,使用命令git push -u origin master第一次推送master分支的所有内容到远程仓库,并与远程仓库的master分支关联(如无master分支则新建并关联);此后,每次本地提交后,只要有必要,就可以使用命令git push origin master推送最新修改;
- git push <远程主机名> <本地分支名>:<远程分支名>
- git push origin :master 等同于 $ git push origin --delete master
- git pull <远程主机名> <远程分支名>:<本地分支名>
- git pull origin master 如果省略本地分支,则将自动合并到当前所在分支上
- 要克隆一个仓库,首先必须知道仓库的地址,然后使用git clone命令克隆。Git支持多种协议,包括https,但通过ssh支持的原生git协议速度最快。
- 查看分支:git branch
- 创建分支:git branch <name>
- 切换分支:git checkout <name>
- 创建+切换分支:git checkout -b <name>
- 合并某分支到当前分支:git merge [--no-ff] <name>
- 删除分支:git branch -d <name>
- 当Git无法自动合并分支时,就必须首先解决冲突(如果有冲突,在git merge时会提示冲突的文件,git status也可以告诉我们冲突的文件)(打开有冲突的文件,Git会用<<<<<<<,=======,>>>>>>>标记出不同分支的内容,我们要修改这些内容,把标记符都去掉,改成我们想要的,然后保存)。解决冲突后,再提交(git add & git commit),合并完成。
- 用git log --graph命令可以看到分支合并图。($ git log --graph --pretty=oneline --abbrev-commit)
- 合并分支时,加上--no-ff参数就可以用普通模式合并,合并后的历史有分支,能看出来曾经做过合并,而fast forward合并就看不出来曾经做过合并。
- 在实际开发中,我们应该按照几个基本原则进行分支管理:
- 首先,master分支应该是非常稳定的,也就是仅用来发布新版本,平时不能在上面干活;
- 那在哪干活呢?干活都在dev分支上,也就是说,dev分支是不稳定的,到某个时候,比如1.0版本发布时,再把dev分支合并到master上,在master分支发布1.0版本;
- 你和你的小伙伴们每个人都在dev分支上干活,每个人都有自己的分支,时不时地往dev分支上合并就可以了。
- 所以,团队合作的分支看起来就像这样:
- 当有Bug需要修复,而我们的dev分支的工作区还有没做完的工作,这个时候先用git stash存储当前工作区,这个时候工作区就被清空了(可以多次stash,系统会保存成stash list)
- 然后git checkout到你想要的分支上(一般是在master分支上修复bug),创建bug修复分支:git checkout -b issue-101,修复bug,提交修改到这个分支,修复完成后,切换到master分支,并完成合并,最后删除issue-101分支
- 恢复dev分支的工作区:切换到dev分支上,用git stash list命令查看保存的工作区列表,然后选择要恢复的工作区(eg. stash@{0})恢复:一是用git stash apply stash@{0}恢复,但是恢复后,stash内容并不删除,你需要用git stash drop stash@{0}来删除;另一种方式是用git stash pop stash@{0},恢复的同时把stash内容也删了。如果stash list中只有一个stash,可以不加stash@{0}。
- 接下来就可以继续我们之前的工作了,工作完成后将工作区提交到dev分支即可。
- 开发一个新feature,最好新建一个分支feature-name;
- 如果要丢弃一个没有被合并过的分支,可以通过git branch -D <name>强行删除。
- master分支是主分支,因此要时刻与远程同步;
- dev分支是开发分支,团队所有成员都需要在上面工作,所以也需要与远程同步;
- bug分支只用于在本地修复bug,就没必要推到远程了,修复完成后合并到master上,然后同步master即可。除非老板要看看你每周到底修复了几个bug;
- feature分支是否推到远程,取决于你是否和你的小伙伴合作在上面开发。
- 首先,可以试图用git push origin branch-name推送自己的修改;
- 如果推送失败,则因为远程分支比你的本地更新,需要先用git pull试图合并;
- 如果合并有冲突,则解决冲突,并在本地提交;
- 没有冲突或者解决掉冲突后,再用git push origin branch-name推送就能成功!
- 如果git pull提示“no tracking information”,则说明本地分支和远程分支的链接关系没有创建,用命令git branch --set-upstream-to=origin/branch-name branch-name。
- 如果git pull提示“fatal: refusing to merge unrelated histories”,这是因为这两个项目没有共同的祖先,没法合并。在进行git pull 时,添加一个可选项: git pull origin master --allow-unrelated-histories,如果还不行,就参考这篇文章:http://blog.csdn.net/zhangmingbao2016/article/details/73478899 。最根本的解决方法是重新从远程仓库中clone下来一个分支,重新开始。
- 忽略某些文件时,需要编写.gitignore;不需要从头写.gitignore文件,GitHub已经为我们准备了各种配置文件,只需要组合一下就可以使用了。所有配置文件可以直接在线浏览:https://github.com/github/gitignore
- .gitignore文件本身要放到版本库(项目所在的文件夹,和.git文件夹在同一级)里,并且可以对.gitignore做版本管理!
- 对于python项目,使用github为我们提供的python.gitignore就可以了,但是如果你用pycharm开发程序,还需要在.gitignore中添加忽略项:.idea/,这是pycharm的工作目录,否则会影响合并.
## master
属性:Project Branch
主分支,稳定版,由管理员负责运维。
## dev
属性:Project Branch
开发分支,项目组长负责运维,所有的新开发的东西都往这个分支合并。如果测试稳定,合并到master。
## feature-name
属性:Normal Branch
正在开发的功能,开发完成后,提交到远程仓库,通知项目组长,由项目组长检查后合并到dev分支
- 如果是一个人开发,就不需要一定要同步到gitee.com,除非是为了备份;
- 如果是多人协同开发,需要在远程仓库上同步一份,然后每个人新建feature-name-yourname个人开发分支。
- 要尽量避免多人开发一个功能,要把功能尽可能细化到一个人的工作量(原子性)。
## bug-no
属性:Normal Branch
需要修复的bug,修复完成后,提交到远程仓库,通知项目组长,由项目组长检查后同步到master。
尽量避免多人修复同一bug。
Git代码管理的更多相关文章
- Git代码管理工具
Git代码管理工具 Git 是分布式的源代码管理工具,这点区别于svn -让源代码可以被追溯,主要是记录了每次的更新了什么,如果新版本不想用,那么则可以退回之前的版本 -Git 是Linux之父当年为 ...
- 配置 Gitblit 进行 Git 代码管理
配置 Gitblit 进行 Git 代码管理 环境 CentOS 7 x64 IP: 10.6.0.2 首先需要安装jdk 安装步骤 就略过了 下载最新版本 gitblit wget http:/ ...
- git代码管理工具-SourceTree 使用介绍
一.SourceTree 简单说明 SourceTree 是git 代码管理的可视化工具,可省去操作命令行的一个图形化工具,下载地址:https://www.sourcetreeapp.com/ 二. ...
- SVN和Git代码管理小结
SVN和Git代码管理小结 之前,先用的是SVN,后来用了Git,最近又在用SVN. 关于代码管理,写几句. 由于自己参与的项目,人通常不超过10个人,版本不是很多,协作比较正常,感觉SVN ...
- Visual Studio Git代码管理环境部署
Visual Studio 2010 部署Git代码管理环境. 第一:首先做Git的安装和环境部署 1.下载并安装Git软件,在windows环境下的Git叫做“msysGit”,官网地址为https ...
- 一篇文章搞定Git——Git代码管理及使用规范
一篇文章搞定Git--Git代码管理及使用规范 https://blog.csdn.net/weixin_42092278/article/details/90448721
- git常用命令,学git代码管理
下面是我整理的常用 Git 命令清单.几个专用名词的译名如下. Workspace:工作区 Index / Stage:暂存区 Repository:仓库区(或本地仓库) Remote:远程仓库 一. ...
- Git代码管理常用命令
1) 远程仓库相关命令 检出仓库:$ git clone git://github.com/jquery/jquery.git查看远程仓库:$ git remote -v添加远程仓库:$ git re ...
- Git 代码管理常用命令
1) 远程仓库相关命令 检出仓库:$ git clone git://github.com/jquery/jquery.git查看远程仓库:$ git remote -v添加远程仓库:$ git re ...
随机推荐
- kubernetes---docker-image
imagePullPolicy <String> Always : 总是从仓库下载 , 如果是image的tag是latest ,如果需要一直保持最新,则应设为Always ,从仓库下载 ...
- 浮点型和BigDecimal的使用
//import java.math.*; package cn.xiaomu_01_rumrnjieduan; import java.math.BigDecimal; /** * 浮点型和BigD ...
- 51Nod-1006 最长公共子序列Lcs
题目链接 Description 给出两个字符串A B,求A与B的最长公共子序列(子序列不要求是连续的). 比如两个串为: abcicba abdkscab ab是两个串的子序列,abc也是,abca ...
- 解决SpringMVC中文乱码问题 -----这是服务器返回参数到前端中文乱码
方法一,使用(produces = "application/json; charset=utf-8"): @RequestMapping(value="/getUser ...
- Java如何在运行时识别类型信息?
在日常的学习工作当中,有一些知识是我们在读书的时候就能够习得:但有一些知识不是的,需要在实践的时候才能得到真知——这或许就是王阳明提倡的“知行合一”. 在Java中,并不是所有的类型信息都能在编译阶段 ...
- Mac 下生成keystore,并对apk进行签名
1.查看本机java环境 /usr/libexec/java_home -V 最后一行是Mac默认使用的jdk版本. 2.进入java的环境 /Library/Java/JavaVirtualMach ...
- 【Docker】(6)---Dockerfile文件
springboot项目打包镜像中的Dockerfile文件 在讲Dockerfile文件之前应该先讲下maven的一个插件叫:dockerfile-maven-plugin.他们是组合一起用的 一. ...
- 使用QuertZ组件来搞项目工作流(一)
前言:抛弃windows计划,拥抱.NET组件.每个人都喜欢监听和插件.今天,几乎下载任何开源框架,你必定会发现支持这两个概念.监听是你创建的C#类,当关键事件发生时会收到框架的回调.例如,当一个作业 ...
- Zuul介绍
1. Zuul是什么 Zuul是所有从设备和web站点到Netflix流媒体应用程序后端请求的前门.作为一个边缘服务应用程序,Zuul被构建来支持动态路由.监视.弹性和安全性.它还可以根据需要将请求 ...
- java~@Async异步功能
@Async注解,可以实现异步处理的功能,它可以有返回值,或者直接在新线程时并行执行一个任务,对于异步来说,它的执行是有条件的,你需要把异步代码块放在单独的类里,当spring在注入时,才不会相互影响 ...