Перемещение файлов

git format-patch

Этот раздел основан на инструкции OCA. <https://github.com/OCA/maintainer-tools/wiki/Migration-to-version-10.0>`_

Используемые переменные:

  • `` $ REPO_PATH``, `` $ REPO_NAME`` - исходный репозиторий
  • `` $ MODULE`` - название модуля, который вы хотите переместить
  • `` $ BRANCH`` - ветвь $ REPO с $ MODULE
  • `` $ DEST_REPO_PATH``, `` $ DEST_REPO_NAME`` - целевой репозиторий
# Set variables
export REPO_PATH=/path/to/misc-addons REPO_NAME=misc-addons MODULE=some_module BRANCH=10.0 DEST_REPO_PATH=/path/to/mail-addons DEST_REPO_NAME=mail-addons

# Create patch
cd $REPO_PATH
git fetch upstream
git format-patch --stdout --root upstream/$BRANCH -- $MODULE > /tmp/relocation.patch

# Remove module from source repository
git checkout -b $BRANCH-$MODULE-relocation-remove upstream/$BRANCH
git rm -r $MODULE
git commit -m "[REM] $MODULE is relocated to $DEST_REPO_NAME"
git push origin
# then create PR on github

# Add commits to target repository
cd $DEST_REPO_PATH
git fetch upstream
git checkout -b $BRANCH-$MODULE-relocation-add upstream/$BRANCH
git am -3 < /tmp/relocation.patch
git push origin
# then create PR on github

git filter-branch

Этот раздел основан на http://gbayer.com/development/moving-files-from-one-git-repository-to-another-preserving-history/

Цель:
  • Переместите каталог 1 из Git-репозитория A в Git-репозиторий B.
Ограничения:
  • Git-репозиторий A содержит другие каталоги, которые мы не хотим перемещать.
  • Мы хотели бы сохранить историю коммитов Git для каталога, который мы перемещаем.
Давайте начнем
  • $ REPO: репозиторий, содержащий модуль (например, `` misc-addons``)
  • $ DEST_REPO: репозиторий, в который вы хотите переместить модуль (например, `` access-addons``)
  • $ MODULE: имя модуля, который вы хотите переместить (например, `` group_menu_no_access``)
  • $ BRANCH: ветвь $ REPO с $ MODULE (исходная ветвь, например, `` 8.0``)

Предупреждение

Если вы установили git из официального Deb-репозитория Ubuntu 14.04, то вам следует сначала обновить его. Вы можете обновить git, используя эту инструкцию Update git

$ cd ~
$ git clone https://github.com/it-projects-llc/$REPO -b $BRANCH
$ cd $REPO
$ git remote rm origin
$ git filter-branch --subdirectory-filter $MODULE -- --all
$ mkdir $MODULE
$ mv * $MODULE # never mind the "mv: cannot move..." warning message
$ git add .
$ git commit -m "[MOV] $MODULE: ready"
$ cd ~
$ cd $DEST_REPO
$ git remote add $MODULE-hosting-remote ~/$REPO
$ git pull $MODULE-hosting-remote $BRANCH

После последней команды у вас будет модуль со всеми его коммитами в вашем репо назначения. Теперь вы можете нажать его на github и т. Д. Вы можете удалить папку `` ~ / $ REPO`` - теперь она не используется.

Предупреждение

Клонирование - это обязательный шаг. Это временный каталог. Будут удалены все модули, кроме того, который вы хотите переместить.

Следующий скрипт может пригодиться, если вам нужно переместить несколько модулей. Но убедитесь, что вы понимаете все его команды перед использованием.

#!/bin/bash

source_repo=$PWD
echo $source_repo

if [ -n "$1" ]
then
       module=$1
       echo $module
else
       echo "Must be module name"
       exit $E_WRONGARGS
fi


if [ -n "$2" ]
then
       dest_repo=$2
       echo $dest_repo
else
       echo "Must be dest_repo"
       exit $E_WRONGARGS
fi

if [ -n "$3" ]
then
       branch=$3
       echo $branch
else
       echo "Must be branch specified"
       exit $E_WRONGARGS
fi

cp -r $source_repo ../$module
cd ../$module
git remote rm origin
git filter-branch --subdirectory-filter $module -- --all
mkdir $module
mv * $module
git add .
git commit -m "[MOV] module -- $module"
cd $dest_repo
git remote add repo_moved_module $source_repo/../$module
git pull repo_moved_module $branch --no-edit
git remote rm repo_moved_module
rm -rf $source_repo/../$module

Чтобы использовать его, вы должны сделать файл movemodule.sh в вашем домашнем каталоге и поместить все строки выше и сделать этот файл исполняемым.

$ cd ~
$ chmod +x movemodule.sh

Чтобы переместить group_menu_no_access из addons-yelizariev в access-addons с помощью movemodule.sh, выполните следующие действия.

$ cd ~
$ git clone https://github.com/yelizariev/addons-yelizariev.git
$ cd addons-yelizariev

Эта часть аналогична перемещению без сценария. Но тогда я набираю только одну команду вместо многих в случае полностью ручного подхода.

addons-yelizarie$ ~/movemodule.sh group_menu_no_access ~/access-addons 8.0