Создать удаленный репозиторий из локальных файлов, которые уже находятся в локальном репо - PullRequest
1 голос
/ 04 января 2012

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

Нам нужно изменить некоторые файлы в нашем репозиторииСоздайте шаблон и создайте новое хранилище с этими измененными файлами, без необходимости фиксировать эти файлы (которые зависят от проекта) в нашем шаблоне, поэтому он останется нетронутым.

Возможно ли это?Используя «git add», «git commit», а затем «git push» с дополнительным параметром, который будет удаленным хранилищем?

По сути, я хочу файлы, а не репо.

Ответы [ 2 ]

2 голосов
/ 05 января 2012

Рассмотрим основной репозиторий (основной) и репозитории, наследуемые (child1, child2).Для начала я бы создал ветку для каждого дочернего элемента в главном репозитории:

main$ git checkout -b child1
... edit/commit for child1 ...
main$ git checkout master
main$ git checkout -b child2 
... edit/commit for child2 ...

Теперь вы можете сделать следующее:

main$ git push git@yourserver:repositories/child1.git child1:master
main$ git push git@yourserver:repositories/child2.git child2:master

Это выдвинет ветвь child1 на главном сервере.репозитория child1.Таким образом, вы можете держать своего главного мастера в чистоте.Если это один толчок, вы можете удалить ветви позже.Вам необходимо принудительно выполнить слияние с дочерними репозиториями, если вы не можете выполнить ускоренную перемотку вперед ( см. Справочную спецификацию для push ).

0 голосов
/ 05 января 2012

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

  1. Сделать копию репозитория шаблонов.

    git clone --no-hardlinks templaterepo newrepo

  2. Отфильтруйте файлы, которые вы не хотите хранить в старом хранилище.

    cd newrepo

    git filter-branch --tree-filter "rm -f sensitive/file1.txt file2.txt" HEAD

  3. Внесите любое другое изменение, как обычно в Git.

    git add ...

    git commit ...

  4. Добавить пульт.

    git remote add origin git@...

  5. Нажмите

    git push origin master

Это гарантирует, что вы сохраните историю для всех файлов, которые вам действительно нужны, и уничтожите историю для тех, которые вам не нужны (и которые потенциально могут содержать конфиденциальные данные).

После шага 1. newrepo практически не имеет отношения к templaterepo больше, кроме общей истории (--no-hardlinks предполагает, что вы клонируете из той же файловой системы и только для дополнительной скорости), так что после этого на вашем templaterepo это не повлияет на содержимое newrepo (или на его пульт).

Подробнее см. git help filter-branch

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...