版本管理工具

版本管理工具简介

  • 常见版本管理工具

    • cvs(Concurrent Versions System)
    • vss(Visual SourceSafe)
    • svn 常用的版本管理工具
    • git 流行的版本管理工具(分支管理强于svn)
    • bitkeeper
    • hg
    • cc(ClearCase)

SVN

  • 常用指令

    • checkout 下载代码
    • update 从服务器更新本地代码代码
    • add 向服务器添加文件
    • commit 提交本地的更改到服务器
    • showlog 查看版本日志

GIT

  • git init

    • 新建仓库(即:git目录)
  • git add

    • git add * 向仓库中添加所有文件
    • git add stc/ 向仓库中添加文件夹
    • .gitignore 哪些文件忽略掉
      • 一般这些文件忽略掉

        • *.config
        • *.creator.user
        • *.includes
        • *.files
        • *.bin
        • *.so
        • *.o
    • git add -A 除了.gitignore之外的文件都加入
  • git status

    • 显示工作目录与暂存区状态, 会看到工作区与仓库代码的异同
    • 不显示已经commit过的文件
  • git commit

    • git commit -m "add xxx" -m表示附加代码提交log信息
  • git checkout

    • git checkout xxx checkout xxx目录
  • git log

    • 看历史更新信息
    • 会看到提交点唯一编号, 提交者, 提交时间等
  • git revert

    • git revert +提交点唯一编号 恢复到该提交点

      • 实际没有删除之后的分支, 而是将提交点的代码重新提交一次.
  • git --help

    • git 帮助
  • git branch

    • git branch 1.0 分支1.0

      • 用于控制项目里分支和程碑意义的版本, 避免commit的杂乱
    • git branch -a 查看分支版本
  • git checkout

    • git checkout 1.0 切换到分支1.0
    • git checkout master 切换回主干

git版本彻底回退

  • git checkout 1.0 先切换分支
  • git branch -d master 删除主干代码提示(若为活动分支则提示)
    • git branch -D master 删除分支不提示
  • git branch master 重建空白主干

回退到本分支历史提交点

git log
git reset --hard 8fcf0d63c0b2c7fc87b3974ebc04157cd310115e
# 以下命令谨慎使用
git push -f origin branch1:branch1 #将本地branch1分支推送到远端branch1分支. 注意加-f命令后, 该还原点之后的所有记录也将被删除.

单文件回退到之前的版本

  • 查看某文件的版本历史, 获取hash值(假如为:8fcf0d63c0b2c7fc87b3974ebc04157cd310115e)
    git log helloWorld.cpp
  • 还原文件到指定的hash值版本
    git checkout 8fcf0d63c0b2c7fc87b3974ebc04157cd310115e helloWorld.cpp
  • 提交(略)

修改上次提交记录(message)

git commit --amend

git多人合作开发

单分支开发

  • 项目经理或管理人员在服务器创建代码库

    • git init test-project --bare
  • 张三从服务器地址xxx克隆代码
    • git clone xxx
  • 张三在本地test-project中写代码
    • 可以git add和git commit到本地仓库
  • 张三最终写好后, 先上传到服务器
    • git push origin master:master

      • 将本地的master分支上传到服务器的master分支, 如果服务器没有该分支则自动创建
      • 李四如果在张三后向master提交代码, 则必须先将本地代码与master同步后才能提交
  • 李四后提交代码
    • git pull 先同步服务器上前人的代码
    • git push origin master:master 再上传自己的代码

多分支开发

  • 张三李四分别在test-project建立自己的分支并开发, push到自己的分支上
  • 管理人员进行分支合并
    • git merge origin/zhangsan ^o, ^s 保存修改
    • git merge origin/lisi 合并lisi代码到当前分支
  • merge冲突
    • 张三李四同时修改同一个地方的代码, 会出现冲突
    • 此时需要沟通保留谁的代码, 并手动处理冲突
  • 遇到里程碑版本则建立版本分支
    • git branch v2.0
    • git push origin v2.0:v2.0
  • 张三李四则在里程碑版本上再修改
    • git merge origin/v2.0
  • 缺点
    • 分支多了以后, 管理混乱
    • 注意: 管理中应明确分支的意义

多分支开发之部分同步

  • 情景: lisi分支的某个功能实现需要同步到zhangsan分支

    • 单个提交
    git cherry-pick  [commitid]
    • 多个提交(不包含commitid1, 包含commitid100)
    git cherry-pick [commitid1..commitid100]
    • 多个提交(包含commitid1, 包含commitid100)
    git cherry-pick [commitid1^..commitid100]

打标签

  • 查看标签:

    git tag 列出所有已有标签
    git show v1.0.0 查看v1.0.0标签信息
  • 添加标签:

     # 格式: git tag -a 标签名 -m "附注信息"
    
     git tag -a v1.1.0 -m "完成了Win版发布"
  • 将本地标签推送到远程仓库分支(加参数--tags)

    # 格式: git push <远程主机名> <本地分支名>:<远程分支名> --tags
    
    git push origin develop:develop --tags
  • 删除本地标签

    git tag -d v1.1.0
  • 将删除push到服务器

    git push origin master:master --delete v1.1.0

git 从主分支历史提交点创建分支

  • 拉取主分支
git clone http://xxxx.git
git log
  • 从提交点建立分支
# git checkout -b <branch name> <SHA1>
git checkout -b shenzhen1 c4fbf631011e3e6083738433a3faef853e8ffe09 # 从该sha1值新建一个shenzhen1分支
  • 修改代码并提交

  • 推送新分支和修改到服务器

git push origin shenzhen1:shenzhen1 # 将本地shenzhen1分支推送到服务器shenzhen1分支, 由于服务器没有shenzhen1分支, 会自动创建该分支.
  • 添加分支的日志跟踪功能
git branch --set-upstream-to=origin/shenzhen1 shenzhen1
git push origin shenzhen1:shenzhen1

撤销操作

  • 有时commit到错误的分支且没有push, 想取消此次commit并保持本地文件不修改, 经过以下操作, 已提交的修改又会回到本地修改(未提交列表)中.

    git reset HEAD~
  • 有时我们提交了错误的文件, 但未push, 我们想要恢复之前的状态, 可以采用reset操作

    • 找到之前提交的git commit的id
    git log
    • 找到想要撤销的id
    git reset --hard id
    • 完成撤销,同时将代码恢复到前一commit_id 对应的版本
    git reset id

完成Commit命令的撤销,但是不对代码修改进行撤销,可以直接通过git commit 重新提交对本地代码的修改

彻底删除文件或文件夹

  • 删除文件或文件夹(文件夹用rm --cached -r)

    git filter-branch --force --index-filter 'git rm --cached --ignore-unmatch your-file-name' --prune-empty --tag-name-filter cat -- --all
  • 推送到服务器

    git push origin master --force --all
  • 回收空间

    rm -rf .git/refs/original/
    git reflog expire --expire=now
    git gc --prune=now
    git gc --aggressive --prune=now

git其他命令

  • 多仓库保存
    git remote add myserver http://xxx.com    #添加一个仓库服务器
    git remote del myserver #删除一个仓库服务器myserver
  • 删除服务器分支
    git push origin :v2.0                     #将一个空分支push到v2.0覆盖掉
  • 切换git服务器(有时服务器的地址会变更, 我们需要切换远程服务器)
    git remote set-url origin http://192.168.1.168:6060/git_test.git        或者直接编辑.git/config文件中url地址, 或者使用第三方git工具直接修改
  • 查看git配置信息
    git config --list
  • 查看git用户名
    git config user.name
  • 查看邮箱配置
    git config user.email
  • 全局配置用户名
    git config --global user.name "nameVal"
  • 全局配置邮箱
    git config --global user.email "eamil@qq.com"

git的一些坑

  • 跨平台时要配置好行尾符自动转换设置

    • 如果想Unix和Win同时都能编译运行, 最好设置好行尾符转换配置
    • 在全局.gitconfig里设置如下

Linux/Unix下

[core] autocrlf = false #关闭自动行尾转换或者autocrlf = input

Win下

[core] autocrlf = true #开启自动行尾转换

技巧:

  • 文件或文件夹改名不要本地操作, 防止Git丢失跟踪日志, 应使用git mv进行操作
git mv -f oldfolder newfolder
  • 添加文件夹使用git add -u会自动过滤掉不跟踪的文件
 git add -u newfolder

技巧(屏蔽跟踪部分本地文件修改)

  • 应用场景, 很多Linux下可执行文件或脚本, git到win下面, 可执行属性丢失了, 并且git会提示为可提交. 可以编写个bat脚本, 阻止git跟踪Windows上的部分文件(以auto-make.sh文件为例).
@echo off
@cd /d %~dp0
echo=
echo ==================================帮助====================================
echo git update-index --assume-unchanged file_path 仓库有但本地需忽略其更改
echo git update-index --no-assume-unchanged file_path 取消本地忽略
echo ==========================================================================
echo=
echo 开始设置项目Git本地配置
@echo on
git update-index --assume-unchanged ./auto-make.sh
@echo off
echo=
echo 设置完毕 @pause
  • Ubuntu安装git GUI工具
  $ sudo apt-get install gitk
$ sudo apt-get install git-gui
- 在工程目录运行gitk 或者git gui 即可.

版本管理工具git与svn简介的更多相关文章

  1. 版本管理工具Git(1)带你认识git

    简介 本篇将带领大家认识,git.github,让大家对git有基本的认识:下面将持续更新几篇文章来介绍git,见git导航: 下一篇中将讲解git的安装及使用: Git系列导航 版本管理工具Git( ...

  2. Studio之版本管理工具Git (图文教程)

    目前业界主流的版本管理工具主要是 svn/git.svn是1种集中式的代码管理工具,而git是1种散布式的代码管理工具,广受极客的爱好.而基于git的github更是全宇宙码农的提高逼格,深究技术的必 ...

  3. 版本管理工具Git(一)简要介绍

    版本管理工具不但可以备份而且还能记录版本,也就是同一个东西不同时期的状态同时可以跟踪追溯.版本管理工具由CVS.SVN.Git.GitHub. 最早的版本管理工具CVS,因为多人开发项目导致工作很难协 ...

  4. linux系统下使用流行的版本管理工具 Git

    前几天被版本管理困扰了好久,主要是因为 没法回到之前的版本,新版本又出了问题真的很尴尬. 终于决定使用目前网上很火的版本管理工具-------Git 历史啥的就不说了,说些有用的. 我用的是oschi ...

  5. 版本管理工具Git(2)git的安装及使用

    下载安装git 官方下载地址:https://git-scm.com/download/win 这里以windows为例,选择正确的版本: 验证是否安装成功,右键菜单中会出现如下菜单: Git工作流程 ...

  6. 版本管理工具Git(2)git的使用

    上一篇带大家认识了Git,在本篇中将讲解Git的安装及使用: Git系列导航 版本管理工具Git(1)带你认识git 版本管理工具Git(2)git的安装及使用 版本管理工具Git(3)VS下如何使用 ...

  7. 版本管理工具Git(3)VS2013下如何使用git

    Git系列导航 版本管理工具Git(1)带你认识git 版本管理工具Git(2)git的安装及使用 版本管理工具Git(3)VS下如何使用git VS下创建项目 vs中新建项目MyGitTest201 ...

  8. 谈谈分布式版本管理工具Git

    一.主流的版本管理工具 目前在企业中比较主流的版本管理工具有:GIT.SVN.CVS等等. 二.什么是Git? Git是一款免费.开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目.是 L ...

  9. git版本管理工具-git的概述

    什么是git Git是一个开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目的一种工具 Git 与常用的版本控制工具 CVS, Subversion 等不同,它采用了分布式版本库的方式,不 ...

随机推荐

  1. DNS隧道实战&&cobaltstrike利用dns隧道

    前言 使用 dns 隧道进行 tcp 通信. 正文 首先配置域名 配置一个 A 记录指向我们的 vps, 然后配置几个 ns 记录,指向刚刚设置的 A 记录 然后在服务端安装 wget https:/ ...

  2. Android组件系列----Activity的生命周期

    [声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/3 ...

  3. ASP.NET Core 系列[1]:ASP.NET Core 初识

    ASP.NET Core 是一个跨平台的高性能开源框架,是一个用于连接到互联网的基于云的现代应用程序. ASP.NET Core 用于构建如 Web 应用.物联网(IoT)应用和移动后端应用,这些应用 ...

  4. Windows自带强大的入侵检测工具——Netstat 命令 查询是否中木马

    Netstat命令可以帮助我们了解网络的整体使用情况.根据Netstat后面参数的不同,它可以显示不同的网络连接信息.Netstat的参数如图,下面对其中一些参数进行说明.如何检测本机是否有被中木马, ...

  5. C# Redis的操作

    Nuget添加StackExchange.Redis的引用 由于Redis封装类同时使用了Json,需要添加JSON.NET引用(Newtonsoft.Json) Redis封装类 /// <s ...

  6. 模板与STL学习简单的笔记

    一.如何进行泛型编程 C/C++是一种静态编程语言,必须需要把代码翻译成可执行的二进制可执行程序然后再运行,一旦编译好之后就不能再变了(数据类型也就必须确定下无法更改,因此要为每一种数据类型编写一份算 ...

  7. JavaScript大位数相加减

    function arrayAdd(number, addNumber) { var numberArr = number.toString().split(''); var addNumberArr ...

  8. 通过nginx 访问 centos 7 服务器上的.Net Core

    先安装依赖 # yum -y install pcre-devel openssl openssl-devel # yum -y install gcc gcc-c++ autoconf automa ...

  9. 【原创】Qt 使用ODBC driver 连接SQL Server

    最近在做数据库的课程设计.第一个需要解决的问题是使用什么工具来实现这个系统.经过一番资料查找,决定使用SQL Server Express 2012作为服务器,使用Qt作为编写客户端程序语言.问题是c ...

  10. 一、TCL事务控制语言 二、MySQL中的约束 三、多表查询(重点) 四、用户的创建和授权 五、MySQL中的索引

    一.TCL事务控制语言###<1>事务的概念 事务是访问并可能更新数据库中各种数据项的执行单元. 事务是一条SQL语句,一组SQL语句,或者整个程序. 事务是恢复和并发控制的基本单位. 事 ...