2011-08-15 90 views
11

我目前擁有與SVN存儲庫綁定的現有Intellij IDEA項目。我正在考慮將這些項目切換爲使用Git SVN,因爲當我沒有連接到SVN存儲庫時,我發現需要有一個本地版本控制系統。如何將現有的Intellij IDEA項目從SVN切換到Git 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會感到困惑,並且不知道如何連接到任何存儲庫。

爲我的作品,唯一的解決方法是做到以下幾點: -

  • 創建SVN倉庫一個全新的項目(空項目)。
  • 執行「git svn clone」。
  • 使用Intellij在其上創建項目。
  • 此時,Intellij IDEA會檢測.git目錄並提示我是否將新創建的文件添加到Git中。
  • 複製從基於SVN的項目到基於Git的項目的所有內容。

也就是說,我無法在一臺機器上的此Intellij IDEA項目上運行Git,同時在另一臺機器上的此Intellij IDEA項目上使用SVN。兩臺機器都必須使用Git,否則Intellij IDEA將無法提交到版本控制庫。我很好,我可以在我所有的機器上使用Git。但是,我試圖找到一種方法,不要爲我現有的基於SVN的項目創建全新的基於Git的項目。這非常乏味,因爲我有很多SVN項目需要現在使用Git來運行。

有沒有更好的解決方案讓我使用Intellij IDEA將我的SVN項目切換到Git?

謝謝。

回答

31

您可以從File | Settings | Version Control中爲當前項目選擇版本控制系統。該設置存儲在其中一個項目文件(.idea/vcs.xml)中,因此如果您沒有將該文件提交到版本控制,則可以在不同的機器上使用不同的版本控制系統。

+0

謝謝下拉菜單。我添加了Git,我離開了SVN它在vcs.xml中的樣子。這似乎允許我在一臺機器上使用Git,在另一臺機器上使用SVN。 – limc

+0

使用Android Studio 1.2.2不存在設置|項目設置。我能夠通過刪除條目與刪除SVN Subversion下的設置|版本控制。這將其更改爲和菜單項VCS |隨後啓用版本控制集成。我用它來啓用Git。這也改變了.idea/vcs.xml。 –

+0

不再有'項目設置',所有的設置都在同一個對話框中。但答案仍然有效。 –

1

順便說一句,您可以在IntelliJ Idea中使用內置的Git支持。將SubGit安裝到您的Subversion存儲庫中,並像通常一樣使用創建的Git存儲庫,即根本沒有git-svn。

SubGit在服務器端工作,並在每次傳入修改時同步Subversion和Git存儲庫。

+0

我真的很喜歡使用SubGit(我不介意爲此付出代價),但是我們的存儲庫與許多外部存儲庫一樣,是一個遺留的repo,它具有很多SubGit無法處理的奇怪問題(舊的外部提交,奇怪的分支過去的策略等)。其中一些是我們近年來修復的,但其中很多都不能修復或沒有成本合理的修復。 – Quartz

+0

@Quartz根據我們的經驗,總有一些與舊的和醜陋的Subversion存儲庫有關,無論是通過轉儲/加載循環修復它,還是在將其導入Git時刪除一些舊版本。歡迎通過[email protected]與我們聯繫,並描述您的Subversion存儲庫的所有醜聞:)我們將盡力爲您的特定案例提供可能的解決方案;我們也可以改變我們計劃在不久的將來實現的功能的優先級。 – vadishev

1

對於基於文件的項目,您可以設置一個污跡過濾器。

在.git/info/attributes(或。gitattributes)添加一行:

/*.ipr filter=vcs 

然後運行下面的(我存儲我的本地腳本在〜/箱,但你可以把它們放在別的地方):

git config --global filter.vcs.smudge /path/to/filter-vcs-git 
git config --global filter.vcs.clean /path/to/filter-vcs-svn 

我的過濾VCS-混帳(塗抹vcsDirectoryMappings mapping線條中使用GIT):

#!/bin/bash 
sed 's/vcs="svn"/vcs="Git"/' 

我的濾波器-VCS-SVN(清潔vcsDirectoryMappings mapping線條中使用SVN):

#!/bin/bash 
sed 's/vcs="Git"/vcs="svn"/' 

這隻適用於帶有sed的* NIX系統。但是你也應該可以通過安裝sed並編寫一個.bat腳本來完成上面的shell腳本。過濾器只是從stdin過濾文件並將過濾後的文件吐出到標準輸出。

下次結帳.ipr文件時,它將被過濾爲使用git,當您添加它(git add *.ipr)時,它將被清除,以便提交的文件使用svn。這似乎與所有的git工具(如git diff)乾淨地工作,這是認爲沒有任何改變,在該行。

0

enter image description here 可以使用VCS版本控制設置對話框