На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
  
> [git] копирование файла
    Здравствуйте!

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

    касательно корректности такой операции, это уже отдельный филосовский вопрос. Но всё же приведу два примера когда мне такое необходимо.

    1. в первом файле есть две группы функций. Я осознал, что их нужно разделить. Первая группа остаётся в первом файле. А вторая группа должна оказаться в новом. Сейчас просто вырезаю и вставляю. Но теряю историю изменений.

    2. два файла, точнее часть изменений в них, хочется держать в идентичном состоянии. В идеале нужен общий чистый предок. В предок вносятся какие-то правки, а потом они спускаются клонам.
    Например шаблон главного файла с точкой входа. Иногда приходится его менять. А затем руками дублировать код инициализации, деинициализации или перехвата исключений.

    В интернете на запрос копирования в git мне почему-то постоянно предлагают checkout. Но я же не хочу извлекать файл. Мне надо сделать его копию.

    Возможно есть другие варианты для получения желаемого? Подскажите, как надо делать?

    В svn есть команда copy. В tortoise svn из обозревателя можно скопировать файл в рабочую директорию, указав произвольное имя. А вот у git почему-то такого не нашёл.
      Похоже на какой-нибудь файл настроек.

      Не встречал такой операции. Искал когда-то способ создать новый файл, как копию существующего. Мне даже историю не надо было копировать (я против того, чтобы менять файл, меняя его историю), просто не хотелось данные в репозитории дублировать. Не нашёл.

      А с настройками предпочитаю структуру в виде дерева (точнее гамака), тогда изменение настроек в одном узле меняет их и у всех его наследников.
        Цитата amk @
        Похоже на какой-нибудь файл настроек.
        ...
        А с настройками предпочитаю структуру в виде дерева (точнее гамака), тогда изменение настроек в одном узле меняет их и у всех его наследников.

        Кстати, это тоже актуально. Для настроек тоже можно было бы.
        Делать в виде гамака? Тогда придётся прописывать интересные пути:
        ..\..\xxx.cfg
        Не так страшно, но разварачивать неудобно. Но можно подумать над вариантами.
          Цитата Eric-S @
          Подскажите пожалуйста, как скопировать файл? Чтоб в рабочей копии появилось два файла с разными именами, но одинаковым содержимым и историей изменений?

          А если попробовать переместить файл дважды в два разных места параллельно из одной ревизии, а затем две полученные ревизии слить - что получится?
            Цитата OpenGL @
            А если попробовать переместить файл дважды в два разных места параллельно из одной ревизии, а затем две полученные ревизии слить - что получится?
            Хм, можно попробовать.

            Добавлено
            Ничего не вышло. Перед вторым push'ем приходится pull'ить первое переименование. В результате получается множественный конфликт и при разрешении появляется вновь созданный файл.
            То есть телодвижений много, а результат тот же, что при обычном копировании. Даже хуже, так как историю в результате потеряли оба файла.
              Цитата OpenGL @
              А если попробовать переместить файл дважды в два разных места параллельно из одной ревизии, а затем две полученные ревизии слить - что получится?

              О подобных трюках я думал. Даже о том, чтоб сделать векту, переименовать в ней файл, а затем слить.
              Но я даже не стал проверять, ибо слишком много действий.
                Я проверил. Специально завёл репозиторий для тестирования. Создал его копию. Создал в ней файл, откоммитил. Отредактировал файл, откоммитил и push'нул. Создал ещё одну копию. Переименовал файл в первой копии, откоммитил, и push'нул. переименовал файл во второй копии, откоммитил, psh не прошёл, сказал, надо сделать merge. Сделал pull, получил аж три конфликта. Разрешилд конфликты указав оставить оба файла. Получил, что второй файл новый. То есть тот же результат, как если бы я его просто скопировал. Сделал push, и после pull в первой рабочей копии обнаружил, что исходный файл просто удалился, а обе копии числятся как вновь созданные.
                  А что, если он пытается скопировать файл до того, как я дойду до присвоения имени? Просто по нажатию ОК у меня зовутся другие операции, и может после того, как там отработает тело начинается копирование файла?
                  0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                  0 пользователей:


                  Рейтинг@Mail.ru
                  [ Script execution time: 0,0235 ]   [ 16 queries used ]   [ Generated: 19.03.24, 05:26 GMT ]