我已按照文档为现有项目设置SVN存储库.我按照以下步骤:
mkdir branches
mkdir tags
mkdir trunk
cp -R /myProject /SVN_Master/trunk
svnadmin create myProject_svn
svn import trunk/myProject file:///SVN_Master/myProejct_svn -m "Initial import"
Run Code Online (Sandbox Code Playgroud)
它现在已经建立了SVN存储库.我该怎么办?当我尝试从XCode管理器结账时,它不起作用,给出路径文件:/// SVN_Master/myProejct_svn.我错过了什么吗?
我如何为远程主机(我的服务器)设置相同的东西?我可以在那里复制创建的本地存储库并使用该路径吗?
谢谢.
我在家使用 Arch Linux 存储库中的 git 版本 1.8.5.3,在工作中使用 Ubuntu 13.10 中的 git 版本 1.8.1.2。在工作中,我们使用svn,所以我使用git svn来处理它。
我在工作和家里使用 git svn 检查了 svn 存储库。包含 git-svn-id 的提交消息是相同的。作者和日期也是如此。但是,生成的提交哈希值并不相同。
git svn fetch && git svn rebase
Run Code Online (Sandbox Code Playgroud)
工作正常。但是,如果我尝试通过 git 在两个存储库之一上合并一些提交,git 自然无法检测到父级并吐出合并错误。
我在想,这只能是由于哈希计算的变化造成的。这也会破坏其他 git 存储库,因此这可能是与 git svn 有关的问题。
第一次编辑
git log --pretty=raw
Run Code Online (Sandbox Code Playgroud)
为所有提交显示不同的父级。这解释了不同的哈希值,但这首先是如何发生的呢?事实证明,如果我一路回到第一次提交,它们确实具有相同的父级,因此具有正确的哈希值。所以一路走来,某些事情一定发生了变化……
第二次编辑
使用找到最后一个公共提交哈希
git merge-base branch1 branch2
Run Code Online (Sandbox Code Playgroud)
下面的提交是一个 svn merge 分支。这是预期的行为吗?
第三次编辑
工作的目的是使用
git cherry-pick hash
Run Code Online (Sandbox Code Playgroud)
并一一应用提交...
更新
都是我的错。我在工作中检查了整个 svn 存储库,但只检查了家里的主干。这就是为什么从两个 svn 分支的合并开始提交哈希值是不同的。
我目前正在使用svn进行项目(服务器版本为1.4,这意味着没有可用的现代合并工具).
我想合并一个分支,并在其中进行了数周的工作.问题是,在创建分支时,它仅作为子文件夹的副本.
Svn项目结构:
/trunk/folder1
/file1
/file2
folder2
folder3
...
Run Code Online (Sandbox Code Playgroud)
现在我正在努力将一个分支合并回主干.
现在的问题是,创建分支的人只复制/ trunk/folder1而不是整个主干.这给git-svn带来了问题,因为它认为我在文件夹中创建了一堆文件.
git co master
git merge branch1
...
create mode 100644 trunk/file1
create mode 100644 trunk/file2
Run Code Online (Sandbox Code Playgroud)
(假设文件最初在/trunk/folder1/file1)
原因是我没有使用svn,因为太多的conflickts.(svn merge需要服务器1.5+和我们只有1.4,svnmerge.py只能同时合并小块,并要求精神负担过的很多...我用半天时间打通只有一半)
使用git merge似乎很有希望,但首先我需要告诉git使用我的主分支的子文件夹作为合并目标.怎么做的?
我正在开发一个最初使用Subversion的项目,但远程存储库已被删除,我不想再使用Subversion了.我想将它迁移到git.
有一种方法可以在没有远程存储库的情况下执行此操作,保留所有修订历史记录(不执行操作git init .)?
我已经做了一个颠覆的git迁移使用git - svn的,没有任何问题它在其他项目上,但他们对远程仓库,我无法找到本地迁移的任何信息.
当我设置我的分支时,我做了:
git svn rebase
git checkout -b branch-a
Run Code Online (Sandbox Code Playgroud)
然后我把那个分支到远程的Git仓库和一个同事和我没有使用它的工作git commit,git pull和git push.
现在,我想从subversion中获取所有新的更改,所以我做了:
git checkout master
git svn rebase
git checkout branch-a
git rebase master
Run Code Online (Sandbox Code Playgroud)
此时我很困惑.似乎发生的事情是git会在一次或多次冲突中提交并迫使我解决它们.然而,冲突似乎是git让HEAD指向树的尖端(使用最新的代码),然后尝试逐个应用每个更改,就好像它将它们应用于原始分支点一样.
感觉就像我重新编写所有代码一样,大部分解决方案都是保留HEAD块并摆脱提交块.
我的期望是git rebase master命令将在分支之前的提交处开始,从master添加每个提交,然后在分支上添加每个提交.然后,这将在分支上产生与尖端之前几乎相同的尖端.
那么,任何人都可以解释我无法理解的内容.如果做不到这一点,任何人都可以建议如何找出为什么git决定这样做.我会在寻找什么git log,看看它为什么这样做.
编辑:2012-03-06
进一步的研究表明,我们似乎在我们的分支和分支结构中有多个提交的多个副本,git log --graph当我们认为只有一个时,从中显示多个分支.
一个片段(鉴定去除细节和提交信息已被替换为MESSAGE- Ñ MESSAGE-.Ñ是指相同的消息):
| * | commit f5c48df66ed9d733364562d8f125866aa6483c1e
| | | Author: commiter-b
| | | Date: Mon Feb 27 16:18:05 2012 -0800
| | |
| | …Run Code Online (Sandbox Code Playgroud) 我正在寻找一种方法来设置现有的git存储库(从Atlassian存储上托管的中央存储库克隆),以便从specfic分支的更改同步到SVN存储库上的路径.我对从SVN获取更改或同步分支和标记不是特别感兴趣; 我只想拥有一个SVN"镜像"我的一个分支.
在阅读git-svn手册页和其他各种来源后,我得到了使用git svn init设置svn repo,但是它会拒绝提交任何内容:
$ git --version
git version 1.9.5.msysgit.0
$ git clone ssh://git@stash-server.mydomain.com:4321/myproject/playground.git
Cloning into 'playground'...
$ cd playground
$ svn mkdir --parents https://svn-server.mydomain.com:5432/svn/playground/trunk -m "Importing git repo"
Committed revision 15900.
$ git svn init https://svn-server.mydomain.com:5432/svn/playground/trunk
$ git svn fetch
W: Ignoring error from SVN, path probably does not exist: (175007): HTTP Path Not Found: REPORT request failed on '/svn/145273/!svn/bc/100/playground/trunk': '/svn/145273/!svn/bc/100/playground/trunk' path not found
W: Do not be alarmed at the above message git-svn is just searching …Run Code Online (Sandbox Code Playgroud)