代码之家  ›  专栏  ›  技术社区  ›  Romain Deveaud

从包含符号链接的GitHub存储库进行Subversion签出

  •  2
  • Romain Deveaud  · 技术社区  · 14 年前

    Subversion Support 但它不处理符号链接。

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

    但在远程平台上更新源代码时,我有一个问题:

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

    有什么想法吗?

    更新

    如果可能的话,我想避免使用脚本解决方案,例如,其他开发人员也可以从Subversion获取源代码。

    3 回复  |  直到 14 年前
        1
  •  4
  •   Nick Hengeveld    13 年前

    GitHub的subversion支持已经更新,可以处理符号链接。

    $ 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
    

    $ 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.
    
        2
  •  1
  •   artagnon    12 年前

    这才是历史上真实存在的东西。当Git在日志中看到这些内容时,它实际上创建了一个符号链接(请参见entry.c:113以获取证据),而不是像Subversion那样将其放入文件中。在我看来,有两种解决方案:

    1. 您必须在Subversion中使用某种post-receive钩子在本地检测这些文件,并用符号链接替换它们。不要实际接触远程存储库,否则Git端会有问题。

    更新:

        3
  •  0
  •   Community datashaman    7 年前

    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 .