2013-09-27 64 views
1

我從一個SVN存儲庫的結構導入代碼如下:Git的克隆與混帳回購協議的根沒有trunk目錄和地方文件

Repo/ 
    branches/ 
    tags/ 

存儲庫沒有一個行李箱。

代碼保存在子目錄項目名,所以當它檢查了我看

Repo/ 
    ProjectName/ 
    Files 

當我執行:

git svn clone -t tags -b branches https://servername/svn/Repo GitRepo 

我在GitRepo得到一個Git倉庫,一切進口正確的問題是,每當我在混帳簽出文件它檢查出來到項目名的子目錄,如:

GitRepo/ 
    ProjectName/ 
    Files 

我的問題是,有沒有什麼辦法辦法告訴混帳SVN克隆回購以這樣的方式,我得到:

GitRepo/ 
    Files 

那麼,我問的是,如果我可以告訴git的使用僅當分支簽出爲存儲庫的根目錄時纔出現的文件夾。

+0

如何獲得'GitRepo/ProjectName/Files'結構?對我來說'git svn clone'爲我的倉庫中的每個項目創建一個git倉庫。 – 2016-05-12 15:04:25

回答

2

原來我需要:

[svn-remote "svn"] 
    url = https://servername/svn/Repo 
    branches = branches/*/*:refs/remotes/branches/*/* 
    tags = tags/*/*:refs/remotes/tags/*/* 

中的.git /配置

第二個/ *在分支和標籤串是我之前錯過了重要的作用。

感謝ChrisA指引我在正確的方向。

+0

謝謝,我認爲答案中缺少一點信息...我必須從我的git svn clone命令中刪除--stdlayout以防止它更改配置文件。 – neoscribe

3

是的,你可以做到這一點,但你需要手動指定幹線,分支和標籤位置(因爲它們在你的情況下是非標準的)。

創建要回購像這樣:git svn init https://servername/svn/Repo GitRepo

然後打開你的.git/config文件和URL,獲取,樹枝和標線,使它看起來像下面這樣:

[svn-remote "svn"] 
    url = https://servername/svn/Repo 
    fetch = ProjectName:refs/remotes/trunk 
    branches = branches/*:refs/remotes/branches/* 
    tags = tags/*:refs/remotes/tags/* 

這裏重要的一行是fetch = ProjectName:refs/remotes/trunk,它在本地創建了遠程和中繼上的ProjectName之間的鏈接。

+0

我想實現類似的東西。我有一個沒有主幹的倉庫,它只有30個項目,每個項目都有自己的主幹。我想遷移到git,但是當我這樣做時,它會與每個項目中的trunk文件夾一起遷移。我嘗試了你的解決方案,但是這是每個項目,有沒有辦法寫一個配置文件,這將30個項目做到這一點? – 2016-05-12 14:50:21