我目前已经存在与SVN存储库绑定的Intellij IDEA项目。我正在考虑将这些项目切换为使用Git SVN,因为当我没有连接到SVN存储库时,我发现需要有一个本地版本控制系统。
由于Intellij IDEA不提供Git SVN网桥,我从命令行运行以下命令将SVN存储库克隆到Git: -
git svn clone --stdlayout --username myuser http://svnrepo/myproject -A authors.txt myproject
克隆SVN存储库后,我使用Intellij IDEA打开基于Git的项目。此时,Intellij IDEA抱怨缺少版本控制目录。我发现Intellij IDEA仍然记得旧的SVN配置。由于项目现在包含.git目录而不是.svn目录,因此Intellij IDEA会感到困惑,并且它现在不知道如何连接到任何存储库。
对我有用的唯一解决方法是执行以下操作: -
那就是说,我不能在一台机器上运行这个Intellij IDEA项目的Git,同时在另一台机器上的这个Intellij IDEA项目上使用SVN。两台机器都必须使用Git,否则Intellij IDEA将无法提交到版本控制存储库。我很好,我可以在我的所有机器上使用Git。但是,我正试图找到一种方法,不为我现有的基于SVN的项目创建全新的基于Git的项目。这非常繁琐,因为我现在需要使用Git运行很多SVN项目。
使用Intellij IDEA将我的SVN项目切换到Git是否有更好的解决方案?
感谢。
答案 0 :(得分:39)
您可以从File | Settings | Version Control
为当前项目选择版本控制系统。该设置存储在其中一个项目文件(.idea/vcs.xml
)中,因此如果您不将该文件提交到版本控制,则可以在不同的计算机上使用不同的版本控制系统。
答案 1 :(得分:2)
答案 2 :(得分:1)
SubGit在服务器端工作,并在每次传入修改时同步Subversion和Git存储库。
答案 3 :(得分:1)
对于基于文件的项目,您可以设置涂抹过滤器。
在.git / info / attributes(或.gitattributes)中添加以下行:
/*.ipr filter=vcs
然后运行以下命令(我将本地脚本存储在〜/ bin中,但您可以将它们放在任何地方):
git config --global filter.vcs.smudge /path/to/filter-vcs-git
git config --global filter.vcs.clean /path/to/filter-vcs-svn
我的filter-vcs-git(涂抹vcsDirectoryMappings mapping
行以使用git):
#!/bin/bash
sed 's/vcs="svn"/vcs="Git"/'
我的filter-vcs-svn(清理vcsDirectoryMappings mapping
行以使用svn):
#!/bin/bash
sed 's/vcs="Git"/vcs="svn"/'
这仅适用于带有sed的* NIX系统。但是你也可以通过安装sed并编写一个.bat脚本来执行与上面的shell脚本相同的操作。过滤器只是从stdin中获取文件,然后将过滤后的文件吐出到stdout。
下次签出.ipr文件时,它将被过滤以使用git
,当您添加它(git add *.ipr
)时,它将被清除,以便提交的文件使用{{1} }。这似乎与所有git工具(如svn
)干净利落地工作,这些工具被认为在该行上没有任何变化。