我有一个在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中提取源代码。
答案 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那样将它放在文件中。我认为有两种解决方案:
更新: 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。