2010-06-28 16 views
2

我有一個託管在GitHub上的項目,我使用Git進行源版本控制。從包含符號鏈接的GitHub存儲庫中進行Subversion簽出

我必須在另一個平臺上拉代碼,但它不能有Git,所以我使用GitHub的Subversion Support來檢出代碼,但它不處理符號鏈接。

例如,我的機器上我有一個符號鏈接:

sf -> ../lib/vendor/symfony/data/web/sf 

但是,當源的遠程平臺上的更新,我有這樣的:

$ svn up 
# updating sources... 
$ cat sf 
../lib/vendor/symfony/data/web/sf 

任何想法?

更新

如果可能,我想避免的腳本解決方案,其他開發商也可以拉來源從Subversion例如。

回答

4

GitHub的subversion支持已更新,以處理符號鏈接。

它適用於從git倉庫與符號鏈接檢查出:

$ svn co https://github.com/nickh/repo_with_symlinks 
... 
A repo_with_symlinks/trunk/app/lib/foo 
A repo_with_symlinks/trunk/app/lib/foo/bar.txt 
A repo_with_symlinks/trunk/foo 
Checked out revision 1. 

$ ls -al repo_with_symlinks/trunk/foo 
lrwxr-xr-x 1 github staff 11 Dec 23 23:11 foo -> app/lib/foo 

,並承諾當從SVN客戶符號鏈接:

$ ln -s app/lib/foo/bar.txt bar.txt 

$ svn add bar.txt 
A   bar.txt 

$ svn commit -m 'added a symlink' 
Adding   trunk/bar.txt 
Transmitting file data . 
Committed revision 2. 
0

顛覆似乎處理符號鏈接,但在tricky way

對於你的問題,你可以嘗試你的符號鏈接再改回以假亂真,例如像這樣(只顯示了理念,未經測試)一些腳本:

#!/usr/bin/env bash 

file=$1 
filecontent=`cat $1` 
if [[ -f "$filecontent" ]]; then 
    svn delete $file --force 
    svn commit -m "Deleting broken symlink $file" 
    svn update 
    ln -s $filecontent $file 
    svn add --force $file 
    svn commit -m "Recreating broken symlink $file" 
fi 

的SVN指令序列來自this question

+0

您的解決方案可以工作,但事實上,我不想要提交更改:這是一個git存儲庫,並且對github的subversion寫支持目前不太穩定(http://github.com/blog/644-subversion-write-support)。 – 2010-06-28 16:14:36

1

這真的是什麼存儲在歷史中。當Git在日誌中看到這些內容時,它實際上會創建一個符號鏈接(參見entry.c:113以供證明),而不是像Subversion那樣將其完整地放入文件中。有兩種解決方案,如我所見:

  1. GitHub必須檢測到這是一個符號鏈接,並通過SVN接口以不同的方式表示它。
  2. 你必須在Subversion中使用某種post-receive hook來本地檢測並用符號鏈接替換這些文件。不要實際觸摸遠程存儲庫,否則Git端會有問題。

更新: GitHub已經解決了現在的問題。

+0

是的,我注意到Git處理符號鏈接,GitHub顛覆支持似乎需要一些改進。 謝謝! – 2010-06-29 14:17:37

+0

不客氣。在相關說明中,您可能想看到核心。符號鏈接變量:如果設置爲false,則不會創建與這些文件相對應的符號鏈接。 – artagnon 2010-06-29 14:50:40