从包含符号链接的GitHub存储库中进行Subversion结帐

时间:2010-06-28 15:54:40

标签: git github symlink svn

我有一个在GitHub上托管的项目,我使用Git进行源版本控制。

我必须在另一个平台上提取代码,但它不能拥有Git,所以我使用GitHub的Subversion Support来检查代码,但它不处理符号链接。

例如,在我的机器上,我有一个符号链接:

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

但是当远程平台上的源更新时,我有这个:

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

有什么想法吗?

更新

如果可能,我想避免脚本解决方案,其他开发人员也可以从Subversion中提取源代码。

3 个答案:

答案 0 :(得分:4)

GitHub的颠覆支持已更新,以处理符号链接。

它适用于使用符号链接从git repo中签出:

$ 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.

答案 1 :(得分:1)

这真的存储在历史中。当Git在日志中看到这个内容时,它实际上创建了一个符号链接(参见entry.c:113进行证明),而不是像Subversion那样将它放在文件中。我认为有两种解决方案:

  1. GitHub必须检测到这是一个符号链接,并通过SVN接口以不同的方式表示它。
  2. 您必须在Subversion中使用某种后接收挂钩来本地检测并使用符号链接替换此类文件。实际上不要触摸远程存储库,否则Git端会出现问题。
  3. 更新: GitHub现在解决了这个问题。

答案 2 :(得分:0)

Subversion似乎处理符号链接,但是在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