Используя Mercurial (hg), можете ли вы просто «hg backout» сделать все коммиты, которые вы сделали для файлов, которые вы не хотите выдвигать, а затем сделать push? - PullRequest
2 голосов
/ 15 июня 2010

Используя Mercurial (hg), можете ли вы просто "hg backout" сделать все коммиты, которые вы сделали для файлов, которые вы не хотите отправлять, а затем выполнить push?

Поскольку Mercurial (или Git) не позволяет нам помещать один файл или одну папку в другой репозиторий, я думаю:

1) Как насчет, мы просто смотрим на коммит, который мы сделали, и hg backout те, которые мы не хотим нажимать.

2) hg out -v для просмотра списка файлов, которые будут выдвинуты

3) теперь сделайте толчок на hg push

Это хороший способ?

Это потому, что я получил следующий совет:

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

2) Некоторые люди сказали мне просто hg clone tmp из этого репозитория, в который я хочу нажать, и затем скопировать локальный файл в этот рабочий каталог tmp, hg commit в этот tmp репозиторий, а затем сделать От себя. Но я обнаружил, что hg clone tmp будет занимать 400 МБ новых данных и файлов, и заставит жесткий диск работать очень усердно, просто чтобы загрузить 1 файл? Поэтому я бы не стал использовать этот метод.

Ответы [ 3 ]

3 голосов
/ 15 июня 2010

Если вы сделаете hg backout, то файлы все равно будут выталкиваться, но будут пропущены в ревизии подсказки.Удаленный репозиторий получит наборы изменений для добавления файлов, а затем получит резервные наборы изменений для их удаления.Таким образом, он будет иметь историю файлов, которые вы не хотите отправлять.

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

1 голос
/ 15 июня 2010

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

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

Mozilla и Python * оба используют Mercurial, и я обещаю вам, что их репозитории намного больше и сложнее, чем то, с чем вы имеете дело. Если они могут использовать их без проблем, конечно, вы тоже можете. Попробуйте, не обращая внимания на несколько используемых байтов, это того стоит.

* Python находится в процессе перехода на Mercurial

EDIT Обращаясь к своему комментарию с адымитруком, вы неправильно понимаете точку зрения Джоэла. Фиксация на ранней стадии, частая фиксация и не бойтесь тратить коммиты, но это не значит, что вы должны отступать всякий раз, когда делаете ошибку - это лишило бы смысла версионирование всего. Если вы делаете что-то, что вам не нравится, исправьте это и повторите. Откат - это функция, потому что она может быть полезна, а не потому, что вы должны делать это постоянно.

0 голосов
/ 15 июня 2010

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

Я бы сделал другую ветку и перебазировал -i на master в GIT, чтобы удалить их.Когда вы будете готовы выдвинуть другие файлы, вы можете перебазировать -i в другой ветке, чтобы выбрать эти файлы, и cherry-pick для master, когда будете готовы.

...