Простих svn revert
вистачило на оригінальний плакат. Однак простий svn revert
не зробить у більш загальному випадку, коли ви
- у вас є редагування, якими ви хочете поділитися, і такі , які ви не хочете ділитися в одному файлі ,
- мати місцеві зміни, які ви все ще зацікавлені в збереженні для своєї приватної вигоди .
@ Пропозиція ErichBSchulz використовувати git add -p
дуже розумно і набагато загальніше застосувати в такому випадку. У відповіді просто бракувало деяких деталей. Якщо припустити, що ваш поточний каталог - це каталог, в який ви хочете зробити патч, який можна поділити, ви можете зробити щось подібне:
Отримайте незайману версію від субверсії в інший каталог (виберіть ім'я каталогу, яке не існує, тут, використовуючи підкаталог TMP/
).
$ url=$(svn info . | awk '/^URL/ {print $2}')
$ svn checkout "$url" TMP
Використовуючи цю незайману версію svn як основу, введіть сховище git, ігноруючи каталоги .svn; передайте все у голові svn у своє тимчасове сховище git
$ cd TMP
$ git init && echo ".svn/" > .gitignore
$ git add -A && git commit
$ cd ..
Скопіюйте недавно підготовлені метадані репозиторію git у свій вихідний робочий каталог; Оскільки каталог незайманої підривної каси не потрібен, ви можете позбутися від нього. Тепер ваш робочий каталог - це сховище git та subversion:
$ mv TMP/.git .
$ rm -rf TMP/
Тепер ви можете використовувати потужні та зручні git add -p
для інтерактивного вибору саме те, що ви хочете поділитися, та закріпити їх у своєму сховищі git. Якщо вам потрібно додати файли до комісії, зробіть це також git add <file-to-add>
ранішеgit commit
$ git add -p
<interactively select (and edit) the chunks you want to share>
$ git add ${the_list_of_files_not_in_yet_in_svn_you_want_to_add}
$ git commit
Використовуючи фіксацію, підготуйте виправлення, яким ви хочете поділитися. З цією метою ви також можете використовувати git diff HEAD^..HEAD
або git format-patch
(останні можна використовувати безпосередньо для підготовки електронних листів, що надсилаються, що містять патч або кілька патчів):
$ git show -p HEAD > my-mighty-patch.patch
Щоб позбутися метаданих git, просто зробіть rm -rf .git/
. Якщо ви плануєте продовжувати злому з оригінальним робочим каталогом, ви можете продовжувати використовувати git
для керування своїми локальними змінами. У цьому випадку ви, мабуть, отримаєте вигоду від інвестицій, як навчитися користуватися git svn
.
Примітка: Якщо ви знайомі з git
цим, це досить тривіальна річ імпровізувати. Інакше це виглядає, можливо, трохи безладно. Ви можете узагальнити підхід, написавши скрипт із цих кроків, щоб реалізувати "інтерактивну фіксацію" або "створення інтерактивного патчу" для svn, який можна використовувати без будь-якого розуміння git.