❶ GIT的版本库
创建一个版本库:git init
( kwydwuf注: 新版 git 中应该用 git init ,不要再用 init-db 命令,具体可以通过命令 git help init 查看)
可以了。现在我们来为本文的写作创建一个版本库: $mkdirgittutorcn$cdgittutorcn$gitinitgit 将会作出以下的回应 /[yourpath]/.git或(/Users/1a/gittutorcn/.git/)这样,一个空的版本库就创建好了,并在当前目录中创建一个叫 .git 的子目录。你可以用 ls -a 查看一下,并请注意其中的三项内容:
* 一个叫 HEAD 的文件,我们现在来查看一下它的内容: $cat.git/HEAD现在 HEAD 的内容应该是这样: ref:refs/heads/master我们可以看到,HEAD 文件中的内容其实只是包含了一个索引信息,并且,这个索引将总是指向你的项目中的当前开发分支。
* 一个叫 objects 的子目录,它包含了你的项目中的所有对象,我们不必直接地了解到这些对象内容,我们应该关心是存放在这些对象中的项目的数据。
Note
关于 git 对象的分类,以及 git 对象数据库的说明,请参看 [Discussion]
* 一个叫 refs 的子目录,它用来保存指向对象的索引。
具体地说,子目录 refs 包含着两个子目录叫 heads 和 tags,就像他们的名字所表达的意味一样:他们存放了不同的开发分支的头的索引, 或者是你用来标定版本的标签的索引。
请注意:master 是默认的分支,这也是为什么 .git/HEAD 创建的时候就指向 master 的原因,尽管目前它其实并不存在。 git 将假设你会在 master 上开始并展开你以后的工作,除非你自己创建你自己的分支。
另外,这只是一个约定俗成的习惯而已,实际上你可以将你的工作分支叫任何名字,而不必在版本库中一定要有一个叫 master 的分支,尽管很多 git 工具都认为 master 分支是存在的。
现在已经创建好了一个 git 版本库,但是它是空的,还不能做任何事情,下一步就是怎么向版本库植入数据了。
❷ 如何一起使用 Git 和 SVN
操作步骤:
你需要:
1.安装 git 和 git-svn
2.创建工作目录:mkdir strigi
3.初始化git工作目录:
4.找到项目的某个提交 (你可以通过 cia版本控制 去获得). 警告: 命令git-log 会从这个版本开始显示项目的版本历史。
5.执行命令git-svn fetch -rREVISION,REVISION 就是刚才获得的那个版本号。
6.更新工作目录:git-svn rebase,现在你就可以在这个项目中使用git作为版本控制了。
要保持工作目录更新,可以执行:
git-svn rebase
你可以用下面的命令将更改提交到svn服务器:
git-svn dcommit
通过这种方式,所有的git提交都会“转换”成相应的svn命令。
解决git-svn rebase的问题
在加入新东西之前,你也许会在同步主开发树的时候体验到一些问题。实际上,你在执行git-svn
rebase之前还必须提交所有的本地修改(使用git-commit命令)。
有时候这并不合理,因为你的更改也许还没有准备好提交(还没有完成、测试或者验证这写代码)。不过别担心,git对此也有一个官方的解决方案,只需下面的步骤:
先把你的改动保存起来,使用命令:git-stash
更新工作副本,使用命令:git-svn rebase,这跟平时一样
恢复保存起来的改动,使用命令:git-stash apply
清除“保存”,使用命令:git-stash
clear。第1步之后,所有未提交的改动在工作副本上都看不到了,因而你可以执行rebase命令,不会有任何问题。
❸ git版本冲突怎么解决
如果系统中有一些配置文件在服务器上做了配置修改,然后后续开发又新添加一些配置项的时候,
在发布这个配置文件的时候,会发生代码冲突:
error: Your local changes to the following files would be overwritten by merge:
protected/config/main.php
Please, commit your changes or stash them before you can merge.
如果希望保留生产服务器上所做的改动,仅仅并入新配置项, 处理方法如下:
git stash
git pull
git stash pop
然后可以使用git diff -w +文件名 来确认代码自动合并的情况.
反过来,如果希望用代码库中的文件完全覆盖本地工作版本. 方法如下:
git reset --hard
git pull
其中git reset是针对版本,如果想针对文件回退本地修改,使用
git checkout HEAD file/to/restore
❹ 如何一起使用 Git 和 SVN
项目环境说明
项目使用svn进行代码版本管理。
使用场景
修改了某些文件后,在修改成另外的实现方法前先备份当前已经实现的方案(git commit临时文件)
在不能连接svn服务器的机器上修改svn版本管理的代码,且需要进行版本管理
前期准备
安装git(MSsyGit,TortoiseGit)
安装svn(TortoiseSVN)
测试步骤
本地新建目录welkinvcproject.svngit,svn checkout file:///E:/Code/svnRepository/welkinvcproject/trunk
在svn Settings的Global ignore pattern增加*.git,例如我的设置是*.git *.obj *.manifest *.manifest.res *.ilk *.idb *.dep *.user *.exe *.pdb
在welkinvcproject.svngit目录鼠标右键点击Git Init Here
在welkinvcproject.svngit目录下建立.gitignore文件,把不需要git管理的文件加入此表,例如.svn. 或者编辑.git/info/exclude文件,我设置的是
*.svn
*.obj
*.manifest
*.manifest.res
*.ilk
*.idb
*.dep
*.user
*.exe
*.pdb
在welkinvcproject.svngit目录鼠标右键点击Git Commit -> "master"...,提交所有svn版本控制的文件
在本地随便修改几个文件,但由于还不能确定是最后的代码,所以不能提交到svn,采取临时提交到git的办法来管理。在welkinvcproject.svngit目录鼠标右键点击Git Commit -> "master"...,提交变更的文件
重复循环执行上一步
最后再提交到svn,再提交到git,这是svn的代码和git的代码是一致的。(稍后如果发现之前提交到git的某个版本的代码更合适,可以使用git revert到相应的版本,再提交到svn和git)
❺ 关于git和github版本管理的疑问,先谢谢大家了,80分~~
楼主 我一个问题一个问题的回答哈
1、git是分布式管理,也就是说服务器上的和本地的可以随时同步更新,当你提交不成功时,你所更改的文件会放在缓存区,别人来提交的时候会一起把所有更改的文件提交,建议代码入库不要多个人来操作 一个人就好了 这样子不容易出错。
2、git分支间的合并---是把两个分之间不同的修改合并到一起,如果遇到冲突(比如修改到了同一个文件),就会提示你,让你忽略或者是手动处理。(建议手动处理)
3、不用,你就在本地客户端克隆一个代码库,然后进行本地修改,到时候代码入库的时候注意一个先后顺序就行了。
4、为什么要在服务器上改呢?直接在本地进行开发,然后在进行服务器的代码同步不就好了吗
❻ 关于git怎样合并不同版本
举个例子:
git rev-list --after="Fri Jan 6 11:47:13 2017 +0800" --before="Fri Jan 11 11:47:13 2017 +0800" --reverse master | git cherry-pick --stdin
先用git rev-list把一段时间内的变更列出来,然后用管道传给git cherry-pick。注意到是为了cherry-pick,所以rev-list的输出顺序反一下,变成最老的先输出。
❼ git版本控制的原理,看书上的说的不是很能理解
不保存他们的差异数据意思是每次他保存的是变化后的整个的文件,
就是如果有修改了那么 他就保存全部 (当然是提交后)
上面的 图中虚线的意思是这个文件没有变化所以这个版本中的这个文件用的是上一个版本中的文件的快照就是
有的版本记录的修改就是 比如版本2里记录了(a文件发生了变化,在38行插入了两行数据是.......)
而git保存的所 在版本而终记录一下 a文件修改后的完整的文件
这样造成的结果就是如果文件修改过多,版本库会过大,那么可以git gc 整理一下,他会把版本库压缩一下,就小了
希望可以帮到你
❽ git上传项目代码,数据库会同步吗
不会直接同步,需要自己操作。
直接在github网页上完成创建代码文件并编写,比较容易。
是本地编写完代码,放到本地仓库,然后再同步到github远程仓库,想着以后做稍大的项目可能会本地测试修改,然后再上传。
第一次配置流程可能有点麻烦,还有一些注意事项,因此在这里总结一下。
主要流程如下:
①注册github账号,下载git客户端
②创建本地仓库(其实就是个文件夹)
③使用ssh密钥连接本地仓库和github远程仓库
④将本地项目上传到github远程项目
❾ Git是什么
Git是什么?
Git是目前世界上最先进的分布式版本控制系统(没有之一)。
Git有什么特点?简单来说就是:高端大气上档次!
那什么是版本控制系统?
如果你用Microsoft Word写过长篇大论,那你一定有这样的经历:
想删除一个段落,又怕将来想恢复找不回来怎么办?有办法,先把当前文件“另存为……”一个新的Word文件,再接着改,改到一定程度,再“另存为……”一个新文件,这样一直改下去,最后你的Word文档变成了这样:
过了一周,你想找回被删除的文字,但是已经记不清删除前保存在哪个文件里了,只好一个一个文件去找,真麻烦。
看着一堆乱七八糟的文件,想保留最新的一个,然后把其他的删掉,又怕哪天会用上,还不敢删,真郁闷。
更要命的是,有些部分需要你的财务同事帮助填写,于是你把文件Copy到U盘里给她(也可能通过Email发送一份给她),然后,你继续修改Word文件。一天后,同事再把Word文件传给你,此时,你必须想想,发给她之后到你收到她的文件期间,你作了哪些改动,得把你的改动和她的部分合并,真困难。
于是你想,如果有一个软件,不但能自动帮我记录每次文件的改动,还可以让同事协作编辑,这样就不用自己管理一堆类似的文件了,也不需要把文件传来传去。如果想查看某次改动,只需要在软件里瞄一眼就可以,岂不是很方便?
这个软件用起来就应该像这个样子,能记录每次文件的改动:
版本
用户
说明
日期
1 张三 删除了软件服务条款5 7/12 10:38
2 张三 增加了License人数限制 7/12 18:09
3 李四 财务部门调整了合同金额 7/13 9:51
4 张三 延长了免费升级周期 7/14 15:17
这样,你就结束了手动管理多个“版本”的史前时代,进入到版本控制的20世纪。
❿ Git分支管理的框架版本同步设计
理解并合理使用git各种分支,便可实现高可用的商用开发模式。
Git 在整个开发周期会保持两个“并行”的主要分支:
①origin/master:该分支的源码HEAD始终指向可立即用于生产环境的状态;
②origin/develop:该分支的源码HEAD总是反映下一个版本的最新开发状况。也可以叫它”整合分支“,从它开始每日的构建;
# 辅助分支 的使用
除了master和develop两个主分支外,我们还需要其他辅助分支去完成并行开发、版本发布、快速修复生产环境Bug等操作,这些辅助分支的生命周期较短,通常在完成任务后立即被删除。
①feature分支(功能分支):
从develop检出:
shell> git checkout -b feature-xxx develop
完成功能后应该立即合并入develop分支,以确保功能被合并到即将发布的版本之中:
shell> git checkout develop shell> git merge --no-ff feature-xxx
*--no-ff将在分支合并时创建新的提交对象,即使本次合并可以使用 fast-forward 提交。这可以避免丢失功能分支的历史信息,把所有功能叠加提交入分支;
②release分支(发布分支):
从develop分支检出
shell> git checkout -b release-*.* develop// *.*为版本号
这个分支主要用于 追求一些细节修改、小Bug修复以及发布版本的数据修改等,该分支不能用于大功能的开发,在版本发布完成之后合并回develop分支并清除。
# 发布进 mastershell> git checkout master shell> git merge --no-ff release-*.* shell> git tag -a *.*
# 合并回 developshell> git checkout develop shell> git merge --no-ff release-*.*
③hotfix分支(热修复分支):
该分支可能从master分支检出,其本质是用于对生产版本进行快速修复。由于develop分支上的开发还不足够稳定,无法并入生产版本,衍生出热修复分支来解决问题
shell> git checkout -b hotfix-*.* master
在完成Bug修复之后,该分支需要合并回master和develop分支,以保证下一个版本中也修复了该Bug。操作与发布分支相似
# 合并入 mastershell> git checkout master shell> git merge --no-ff hotfix-*.* shell> git tag -a *.*.*
# 合并入 developshell> git checkout develop shell> git merge --no-ff hotfix-*.*
来源:Git中各种分支的使用