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 ...
随机推荐
- [Swift]LeetCode757. 设置交集大小至少为2 | Set Intersection Size At Least Two
An integer interval [a, b] (for integers a < b) is a set of all consecutive integers from ato b, ...
- [Swift]LeetCode816. 模糊坐标 | Ambiguous Coordinates
We had some 2-dimensional coordinates, like "(1, 3)" or "(2, 0.5)". Then, we re ...
- Build Assimp library for Android
Build Assimp library for Android 首先各路教程中有推荐使用 NDK 或者 STANDALONE TOOLCHAIN 编译的,根据我的理解,这两种方式都是可以的,如果能直 ...
- 7.Git分支-分支简介、分支创建、分支切换
1.分支简介 几乎所有的版本控制系统都支持某种形式的分支.使用分支意味着可以把你的工作从开发主线上分离开来,以免影响开发主线.Git的分支是其必杀技,它相对于其它版本控制系统来说,具有难以置信的轻量性 ...
- VirtualBox虚拟机克隆迁移步骤
VirtualBox是常用的虚拟机管理软件,和VMware一样,用的很多.在使用过程中,有的时候需要对虚拟机进行迁移.比如我们原来的服务器,使用的win10操作系统,上面利用VirtualBox安装了 ...
- JQ 放大镜
<!DOCTYPE html><html> <head> <meta charset="UTF-8"> <title> ...
- Dubbo(二) —— dubbo配置
一.配置原则 JVM 启动 -D 参数优先,这样可以使用户在部署和启动时进行参数重写,比如在启动时需改变协议的端口. XML 次之,如果在 XML 中有配置,则 dubbo.properties ...
- SpringBoot入门教程(二)CentOS部署SpringBoot项目从0到1
在之前的博文<详解intellij idea搭建SpringBoot>介绍了idea搭建SpringBoot的详细过程, 并在<CentOS安装Tomcat>中介绍了Tomca ...
- Java基础2:基本数据类型与常量池
本文会结合虚拟机对引用和对象的不同处理来介绍三大特性的原理. 三大特性:继承 封装 多态 继承 Java中的继承只能单继承,但是可以通过内部类继承其他类来实现多继承. public class Son ...
- vnc server的安装
vnc是一款使用广泛的服务器管理软件,可以实现图形化管理.我在安装vnc server碰到一些问题,也整理下我的安装步骤,希望对博友们有一些帮助. 1 安装对应的软件包 [root@centos6 ~ ...