Подрывная деятельность:Проверяйте только те файлы, которые были затронуты во время определенной фиксации

StackOverflow https://stackoverflow.com/questions/971188

  •  13-09-2019
  •  | 
  •  

Вопрос

В Subversion, возможно ли проверить Только эти файлы, затронутые во время конкретной фиксации, при условии, что вы знаете конкретный номер редакции?

Это было полезно?

Решение

Я думаю, что при извлечении Subversion можно извлечь только определенную папку, а не отдельные файлы.Тем не менее, команда:

svn log -r *revision* -q -v

выведет список изменений, связанных с указанной ревизией, чтобы вы могли обработать вывод этой команды и скопировать куда-нибудь нужные файлы после извлечения рабочей папки для всего каталога.

Другие советы

вы можете получить список файлов, измененных после конкретной версии, например:

svn diff -r [REVNUM]:HEAD --summarize > fileschanged.txt

затем создайте скрипт для извлечения каждого файла в файле fileschanged.txt.

Я думаю, возможно, вы используете здесь термин «извлечение» в его смысле CVS, то есть «обновление svn».Это правильно?

Если да, то вы можете обновиться до нужной вам версии:

svn update -r12345

или даже только те файлы этой версии:

svn update -r12345 file1 file2 file3

хотя вам придется получить список файлов из svn, используя некоторые другие предложения.

Я знаю, что это немного оффтопично, но я использую для этого TRAC, и он экспортирует только файлы, измененные между двумя ревизиями, в виде zip-архива с файлами в их исходной структуре каталогов.

svn checkout работает только на уровне каталога, а не на уровне файла.Конечно, если все изменения в конкретном наборе изменений были из одного и того же каталога, вы можете выполнить svn checkout <url> <path> -r<revid>.

Вы можете проверить список затронутых файлов, используя svn log -q -v -r123 url.

Если вы действительно хотите получить только затронутые файлы, вы можете использовать svn cat urlToFile -r123 > myfile для каждого файла.

Если вы используете последнюю версию svn, вы можете извлечь пустую папку, а затем обновить определенные файлы.

после получения списка файлов для выбора,

svn co --depth=empty url dest
cd dest
svn up file1 file2 file3

Редактировать:почти то же решение, что и принятый ответ здесь: Извлечение одного файла из Subversion

Вот один из способов сделать это.

svn co --глубина пустой svn://myrepository/mytrunk

cd mytrunk

svn diff -c[REVNUM] svn://myrepository/mytrunk | grep "Index:" | awk '{print $2}' | xargs -n 1 обновление svn --родители

Результат работы однострочника awk представляет собой список файлов, измененных с указанием относительных путей.Как упоминалось ранее, обновление работает с отдельными файлами, в то время как проверка работает с модулями.Опция '--parents' принудительно создает каталоги в вашей рабочей копии по мере необходимости.

Обратите внимание, что в update также есть опция '--changelist' (по крайней мере, в версии 1.7.1 +), но, похоже, она не делала того, что я хотел.

Мне нужен был дамп всех файлов, изменившихся в пределах дюжины ревизий.Я сделал так (эти команды могут быть не идеальными, это лишь общее объяснение):

Создайте разницу, которая покажет нужные вам файлы, и запишите список в текстовый файл.

svn diff --summarize -r219:232 > r219-232_Summary.txt

Это даст вам текстовый файл со строками типа

M      path/to/file.php

Измените формат файла, заменив начало каждой строки командой «svn up» вместо «A», «M» или чего-то еще.

 sed -i 's/A      /svn up /g' ./r219-232_Summary.txt

...который даст вам такие строки, как

svn up path/to/file.php

Создайте новый каталог и сохраните в нем свой проект.

svn co http://www.repo.net/whatever

Удалите все в каталоге, кроме файла .svn (я использую относительно новый клиент svn, поэтому, если вы используете старый клиент svn, у которого есть .svn в каждом каталоге, я не знаю, как это будет работать)

rm -rf ./*

Скопируйте текстовый файл, сделайте его исполняемым и запустите как сценарий.

cp /path/to/wherever/r219-232_Summary.txt ./r219-232_Summary.sh
chmod 777 ./r219-232_Summary.sh
./r219-232_Summary.sh

Если все пойдет по плану, оболочка должна проанализировать каждую команду «svn up» в вашем текстовом файле и заполнить каталог только теми файлами, которые вас интересуют.

Вот простая версия сценария bash.Я использовал «шаблон поиска», чтобы удалить ненужные строки.Версия, адрес репозитория и путь назначения передаются в качестве аргументов, но могут быть жестко запрограммированы.

#!/bin/bash

REVISION=${1}
REPOSITORY="${2}"
DEST_PATH="${3}"
SEARCH_PATTERN="trunk"
FILES=$(svn log -q -v  $REPOSITORY -r $REVISION | grep $SEARCH_PATTERN)

mkdir -p $DEST_PATH
for FILE in $FILES ; do
    if [[ $FILE == *"$SEARCH_PATTERN"* ]]
    then
          FOLDER=$(dirname $FILE)
          mkdir -p $DEST_PATH/$FOLDER
      svn export -r $REVISION $REPOSITORY/$FILE $DEST_PATH/$FOLDER
    fi
done

#EOF

Вы можете получить только список файлов в конкретном изменении, используя

svn log -v -q -r rev

Затем вы можете очистить маркеры в начале линии с помощью трубы, например

sed -e "s/^ . / /" | egrep -v "Changed paths:|-----"

.Чтобы получить только файлы, вы, вероятно, будете использовать svn cat как предложил Николай.

[отредактировано для очистки и упрощения конвейера sed.]

Извините, что воскрешаю давно забытый вопрос, но к моему удовлетворению я так и не получил на него ответа.

Вы можете создать простой инструмент для этого, используя SVNKit.я нашел это блог об этом и немного модифицировал код под свои нужды.Я использую его по сей день в процессе развертывания.

Он выполняет экспорт, а не оформление заказа, но я уверен, что это будет простое изменение.

svn mergeinfo --show-revs допускаются http://base.com.rev1 http://base.com.rev2

Это даст много изменений

Теперь вы хотели бы увидеть список файлов в каждой ревизии.Итак, возьмите список редакций, скопируйте его в блокнот или в EditPlus и измените так, чтобы они поместились в одну строку.

svn log -r r33521 -r33762 -3456 -r5623 -q -v >> пропущенные файлы.txt

Примечание :У меня было 118 ревизий и мне не удалось правильно получить список файлов.Итак, я выполнил приведенную выше команду, разбив на подмножества ревизий.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top