Извлечение Subversion из репозитория GitHub, который содержит символические ссылки - PullRequest
2 голосов
/ 28 июня 2010

У меня есть проект, размещенный на GitHub, и я использую Git для управления версиями исходного кода.

Мне нужно получить код на другой платформе, но у него не может быть Git, поэтому я использую Subversion Support GitHub для извлечения кода, но он не обрабатывает символические ссылки.

Например, на моей машине есть символическая ссылка:

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

Но когда исходные коды обновляются на удаленной платформе, я получаю следующее:

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

Есть идеи?

Обновление

Если возможно, я хочу избежать использования скриптов, другие разработчики также могут, например, извлекать источники из Subversion.

Ответы [ 3 ]

4 голосов
/ 24 декабря 2011

Поддержка подрывной деятельности GitHub была обновлена ​​для обработки символических ссылок.

Работает для извлечения из репозитория 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.
1 голос
/ 29 июня 2010

Это действительно то, что хранится в истории. Когда Git видит это содержимое в журнале, вместо буквального помещения его в файл, как это делает Subversion, он фактически создает символическую ссылку (для доказательства см. Entry.c: 113). На мой взгляд, есть два решения:

  1. GitHub должен обнаружить, что это символическая ссылка, и представлять ее по-разному через интерфейс SVN.
  2. Вы должны использовать какую-то ловушку пост-получения в Subversion для локального обнаружения и замены таких файлов символическими ссылками. На самом деле не трогайте удаленный репозиторий, иначе у Git-стороны возникнут проблемы.

ОБНОВЛЕНИЕ: GitHub теперь исправил проблему.

0 голосов
/ 28 июня 2010

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 происходит от этого вопроса .

...