从包含符号链接的GitHub存储库进行Subversion签出
我有一个项目托管在GitHub上,我使用Git进行源代码版本控制 我必须在另一个平台上提取代码,但它不能有Git,所以我使用GitHub来签出代码,但它不处理符号链接 例如,在我的机器上有一个符号链接:从包含符号链接的GitHub存储库进行Subversion签出,git,github,symlink,svn,Git,Github,Symlink,Svn,我有一个项目托管在GitHub上,我使用Git进行源代码版本控制 我必须在另一个平台上提取代码,但它不能有Git,所以我使用GitHub来签出代码,但它不处理符号链接 例如,在我的机器上有一个符号链接: sf -> ../lib/vendor/symfony/data/web/sf 但在远程平台上更新源代码时,我有: $ svn up # updating sources... $ cat sf ../lib/vendor/symfony/data/web/sf 有什么想法吗 更新 如
sf -> ../lib/vendor/symfony/data/web/sf
但在远程平台上更新源代码时,我有:
$ svn up
# updating sources...
$ cat sf
../lib/vendor/symfony/data/web/sf
有什么想法吗
更新
如果可能的话,我想避免使用脚本解决方案,其他开发人员也可以从Subversion中获取源代码。Subversion似乎可以处理符号链接,但以一种简单的方式 对于您的问题,您可以尝试将您的符号链接重新转换为真实的符号链接,例如,使用一些这样的脚本来显示未经测试的想法:
#!/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指令序列来自。这实际上是存储在历史记录中的指令序列。当Git在日志中看到此内容时,它实际上创建了一个符号链接,而不是像Subversion那样将其放入文件中。请参见entry.c:113以获取证据。在我看来,有两种解决方案: GitHub必须检测到这是一个符号链接,并通过SVN接口以不同的方式表示该链接。 您必须在Subversion中使用某种post-receive钩子来本地检测这些文件,并用符号链接替换它们。不要实际接触远程存储库,否则Git端将出现问题。
更新:GitHub现已修复该问题。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.
您的解决方案可以工作,但我不想提交更改:这是一个git存储库,对github的subversion写入支持目前还不太稳定。是的,我注意到git以这种方式处理符号链接,github subversion支持似乎需要一些改进。非常感谢。不客气。另一方面,您可能希望看到core.symlinks变量:如果将其设置为false,则不会创建与这些文件对应的符号链接。