Я думаю , що повідомлення @Aredridel було найближчим, але є ще трохи до цього - тому я додам це тут; справа в тому svn, якщо ви перебуваєте в підпапці репо, і ви робите:
/media/disk/repo_svn/subdir$ svn export . /media/disk2/repo_svn_B/subdir
тоді svnви експортуєте всі файли, які перебувають під контролем редагування (вони могли бути також свіжододаними; або зміненим статусом) - і якщо у вас в цьому каталозі є інші "мотлохи" (і я не рахую .svnтут папки, але видимі речі, такі як .oфайли) , він не буде експортований; експортуються лише ті файли, зареєстровані репортажем SVN. Для мене одне приємне - це те, що цей експорт включає також файли з локальними змінами, які ще не були здійснені; і ще одна приємна річ - те, що часові позначки експортованих файлів такі ж, як і оригінали. Або, як svn help exportзазначається:
- Експортує чисте дерево каталогів з робочої копії, визначеної PATH1, при перегляді REV, якщо воно дано, інакше при РОБОТІ, в PATH2. ... Якщо REV не вказаний, всі локальні зміни будуть збережені. Файли, які не перебувають під контролем версій, не будуть скопійовані.
Щоб зрозуміти, що gitчасові позначки не збережуть, порівняйте вихід цих команд (у підпапці gitрепо за вашим вибором):
/media/disk/git_svn/subdir$ ls -la .
... і:
/media/disk/git_svn/subdir$ git archive --format=tar --prefix=junk/ HEAD | (tar -t -v --full-time -f -)
... і я, в будь-якому випадку, помічаю, що git archiveвсі часові позначки архівованого файлу однакові! git help archiveкаже:
git-архів поводиться інакше, коли йому присвоєно ідентифікатор дерева порівняно з тим, коли йому надано ідентифікатор фіксації чи ідентифікатор тегу. У першому випадку поточний час використовується як час модифікації кожного файлу в архіві. В останньому випадку замість цього використовується час фіксації, записаний у згаданому об'єкті фіксації.
... але, мабуть, обидва випадки встановлюють "час модифікації кожного файлу"; тим самим не зберігаючи фактичні часові позначки цих файлів!
Отже, щоб також зберегти часові позначки, ось bashсценарій, який насправді є «однолінійним», хоч і дещо складним - тому нижче він розміщений у декількох рядках:
/media/disk/git_svn/subdir$ git archive --format=tar master | (tar tf -) | (\
DEST="/media/diskC/tmp/subdirB"; \
CWD="$PWD"; \
while read line; do \
DN=$(dirname "$line"); BN=$(basename "$line"); \
SRD="$CWD"; TGD="$DEST"; \
if [ "$DN" != "." ]; then \
SRD="$SRD/$DN" ; TGD="$TGD/$DN" ; \
if [ ! -d "$TGD" ] ; then \
CMD="mkdir \"$TGD\"; touch -r \"$SRD\" \"$TGD\""; \
echo "$CMD"; \
eval "$CMD"; \
fi; \
fi; \
CMD="cp -a \"$SRD/$BN\" \"$TGD/\""; \
echo "$CMD"; \
eval "$CMD"; \
done \
)
Зауважте, що передбачається, що ви експортуєте вміст у "поточному" каталозі (вище, /media/disk/git_svn/subdir) - і призначення, в яке ви експортуєте, дещо незручно розміщене, але воно знаходиться в DESTзмінній середовищі. Зауважте, що з цим сценарієм; ви повинні створитиDESTперед створенням вищевказаного сценарію каталог вручну самостійно.
Після запуску сценарію ви зможете порівняти:
ls -la /media/disk/git_svn/subdir
ls -la /media/diskC/tmp/subdirB # DEST
... і, сподіваємось, побачити ті самі часові позначки (для тих файлів, які були під контролем версій).
Сподіваюся, це допоможе комусь,
ура!