- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我使用 git-svn 来保存共享 Subversion 存储库的克隆。最近有人在我有 git svn fetch
之后编辑了修订版的提交消息 (a la this SO question)编辑那个修订版。如何更正我的 Git 克隆以获得正确的提交消息?
我曾期待 git svn reset
其次是 git svn fetch
重新获取此提交并更新内容,让我只需要修复我的本地分支机构,但这实际上似乎没有做任何事情; git svn fetch
不会重新获取我重置为的提交。
(是的,我认为更改提交消息是个坏主意,但这不是我可以控制的。)
更新:我尝试了 sleske 建议的过程(事实上,我在提出问题之前已经尝试过,但我只是再次尝试以防万一),但没有成功。我得到如下输出:
me_and@centos ~/code ((358a2dd...)) Fri 16 Jan 15:31:27
$ git svn reset -p 55102
r55094 = 25d126219f7eeddfc7d0842704c7efcc0443dd70 (refs/remotes/origin/branchname)
me_and@centos ~/code ((358a2dd...)) Fri 16 Jan 15:33:06
$ git svn fetch
me_and@centos ~/code ((358a2dd...)) Fri 16 Jan 15:33:08
$
git svn fetch
没有输出(或者自从我上次运行它以来是否有提交,但它只是获取新的提交,而不是重新获取旧的),特别是没有 rereading
sleske 示例中的消息。
如果相关,我使用的是 Git v2.0.4。
更新 2:略微编辑 .git/config
下面:
[core]
repositoryformatversion = 0
filemode = true
bare = false
logallrefupdates = true
[svn-remote "svn"]
url = http://server/repos/repo
fetch = trunk:refs/remotes/origin/trunk
branches = branches/*:refs/remotes/origin/*
tags = tags/v10/*:refs/remotes/origin/tags/*
tags = tags/v11/*:refs/remotes/origin/tags/*
tags = tags/v12/*:refs/remotes/origin/tags/*
tags = tags/v13/*:refs/remotes/origin/tags/*
我不会发布 git branch -avv
的完整输出,因为它有很多,但这是真正有趣的地方,所以我将发布我所做的一切的列表:
我检查了一个分支,而不是出现错误的分支。正在运行 git svn reset
没有区别:remotes/origin/branchname
继续指向最近的提交。不出所料,git svn fetch
什么也没做。
我 checkout remotes/origin/branchname
然后跑了git svn reset
再次。这有效:remotes/origin/branchname
指向 duff 提交的父级。
我跑了 git svn fetch
.这绝对没有做任何事情:没有获取任何提交并且 remotes/origin/branchname
没动。
我在 Subversion 存储库的那个分支上创建了几个虚拟提交(一个添加了一个空文件,下一个又删除了它),然后运行 git svn fetch again
.
这就是真正奇怪的地方:没有重新获取 duff 提交。相反,提取从我添加虚拟文件的提交开始,报告过程中出现“索引不匹配”。运行 git show
在添加虚拟文件的提交上显示它以及我重置为的提交和虚拟提交之间的所有差异。
现在,运行 git log --graph --decorate --pretty=oneline --abbrev-commit HEAD origin/branchname
看起来像这样:
* 7b12bbc (origin/branchname) Remove dummy file
* 730c2ab Add dummy file # But `git show 730c2ab` includes the diffs between b89af06 and 93920f9 as well
| * 93920f9 (HEAD) Uninteresting commit
| * 91c7163 Uninteresting commit
| * ce51022 Commit with the changed commit message
|/
* b89af06 Uninteresting commit
请注意,HEAD
除外,现在没有任何内容指向此分支上的某些提交。
我很快得出结论,至少其中一些行为只是 git svn
中的一个错误.当然,我在上面第 4 点中看到的情况根本不应该发生,至少在我看来是这样。
最佳答案
git svn reset
确实是正确的做法。假设更改了 SVN 修订版 4711,则步骤为:
1) 丢弃更改后的 SVN 修订版(及其之后的所有内容):
$ git svn reset -p 4711
r1 = 18614es3df44c30da07 (refs/remotes/git-svn)
2) 获取修改后的版本:
$ git svn fetch
rereading 18614es3df44c30da07
A trunk/a
r4711 = 8dfb7d0758dbbc1d06004 (refs/remotes/git-svn)
A trunk/b
r4712 = e7337af3743e48c90ef3fa09906378b95997314c (refs/remotes/git-svn)
[...]
3) 现在git-svn的数据已经修复了。您仍然必须修复本地分支机构。例如master跟踪SVN主干,运行:
git rebase remotes/git-svn
(其中“remotes/git-svn”是由 git svn
创建的远程跟踪分支 - 它可能有不同的名称)。
这在 git svn manpage 中有很好的解释。 ,在“重置”子命令的部分。
关于git - 历史 Subversion 修订更改后修复 git-svn 存储库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27963864/
我们在我们的开发服务器上本地使用 Subversion。我们需要为我们的客户提供相同的访问权限。这可以通过让服务器在网络上发布它来实现,但由于其他一些我不想透露的原因,我们不想发布它。 我想知道的是,
我目前正在使用远程 svn 服务器。但是有时我必须离线工作(因为远程服务器位于封闭的网络上,因此无法连接到互联网)。我想要做的是将 svn 服务器复制到我的本地服务器(也就是我的笔记本电脑)。 我可能
我使用 visual studio 2005,所以集成是必须的。 谢谢 最佳答案 在 VS2008 中我更喜欢 Tortoise SVN 和 Ankh。 祝你好运! 关于windows - 对于以前从
我目前有一个小组颠覆存储库,其中有多年的历史。公司已经提出从现在开始托管我们的颠覆。我想知道将我们的存储库添加/导入/合并到 Corps 存储库的最佳方法是什么。我想保留历史记录,但我不介意我是否会丢
我们在客户端和服务器上运行 Subversion 1.5.4。是否可以直接从 Subversion 1.5 升级到 1.7 版?需要哪些步骤来做到这一点? 最佳答案 我读了release notes
我正在尝试使用 Ansible 颠覆模块从我的存储库服务器中 check out SVN 存储库。我已经在我的服务器中配置了一个 svn 存储库。我正在尝试使用 Ansible 剧本和颠覆模块将其 c
当前是否有允许在 SVN 中进行独占结账的功能? Delphi有没有好的插件可以通过IDE访问? 最佳答案 SVN有一个“locking”的概念,大致对应于独占结账。例如,在TortoiseSVN中这
我刚刚将版本控制系统迁移到 Subversion。我们选择使用最新版本的 Subversion 1.7。当我切换到 Delphi 编辑器中的历史 View 时,出现错误: The path 'path
我在 Eclipse 中没有看到任何从 SVN(通过命令行)明确 checkout 的项目的 Subversion 图标,我不确定它何时停止工作。 我已经尝试过 Subclipse 和 Subvers
我在我的服务器上成功安装了 subversion。当我运行命令时: which svn 我收到回复: /usr/bin/svn 我使用以下命令在我的根目录中创建了一个存储库,它是我的 httpdocs
我将 IntelliJ IDEA 6.0.6 配置为使用 Subversion 进行版本控制。当我右键单击项目中的 Java 文件时,Subversion 菜单项现在出现在上下文菜单中。但是,所有子菜
我想 checkout ,然后根据需要更新 Django Subversion trunk在 Mac OS X Leopard 10.5.5 机器上。 我只对在我的 Mac 上更新 Django 代码
我想在 macOS 上将 Subversion 存储库转换为 Mercurial。我已经制作了 svn 存储库的本地副本。然后我尝试了 hg convert --source-type svn --d
当我尝试从 GitHub 获取最新版本时遇到此错误。做您对此错误没有任何经验,请帮助我!!! 我尝试了一个全新的结帐并得到了同样的错误。请注意,它仅在我从 Github checkout 时发生。当我
我正在尝试通过 SVN+SSH 从 Windows Server 2003 计算机设置计划的 Subversion 提交作为一项任务。我希望提交脚本以 SYSTEM 用户身份执行。所以我猜想,为了让它
1、获取svn程序 2、安装 Subversion(以下简称SVN)的服务器端和客户端。下载下来的服务器端是个 zip压缩包,直接解压缩即可,比如我解压到 E:\subversion 。客户端安装
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 要求我们推荐或查找工具、库或最喜欢的场外资源的问题对于 Stack Overflow 来说是偏离主题的,
提交是由 Subversion 原子执行的吗? 如果提交失败会怎样? 是否有一些文件提交成功而一些失败?如果是这样,我该怎么做才能回到正确的状态? 最佳答案 是的,提交是原子的——这里是 citati
我有一个关于 Subversion 的问题。我一直是最终用户,所以我对其实际工作原理的了解非常有限(所以如果这是一个愚蠢的问题,请原谅)。 我已经安装了 WAMP 并使用它进行了我的初始开发和测试。因
我有一个包含目录树的存储库。其中一个目录是数千个文件的家。这个目录很少被修改,但它使诸如“根目录上的 svn 状态”或“根目录上的 svn 更新”之类的操作变得如此缓慢,以至于它们不再实用。 有没有办
我是一名优秀的程序员,十分优秀!