Git: предоставить доступ к мастеру без доступа к истории фиксации [duplicate]

Если вы действительно смотрите на производительность, то используйте numpy!

Вот полный блокнот как сущность на github со сравнением между списком, numpy и pandas.

https://gist.github.com/denfromufa/2821ff59b02e9482be15d27f2bbd4451

4
задан Léo 28 October 2013 в 19:20
поделиться

3 ответа

Вы можете сделать это очень эффективно в своем текущем репо:

Начиная с:

# ...---o---H    HEAD, master

do

git cat-file -p master \
| sed '1,/^$/d' \
| git commit-tree HEAD^{tree} \
| xargs git branch public

, чтобы получить

# ...---o---H    HEAD, master
#
#           H'   public  <-- H's exact content and commit message, no history

Затем,

git merge -s ours public

# ...---o---H---I    HEAD, master   <-- gives later merges an accurate base
#              /
#           H''   public

git remote add public -t public its://u/r/l   # <-- '-t public` sets default push
git push public

, и все готово.

(править: добавлено -t public безопасное воспроизведение, поэтому вам нужно сделать что-то явное для нажатия непубличная история)

2
ответ дан jthill 22 August 2018 в 15:15
поделиться
  • 1
    Интересный и довольно подробный, более полный, чем мой ответ. +1 – VonC 28 October 2013 в 21:21
  • 2
    Спасибо огромное! После некоторых тестов это лучшая стратегия, которую я пробовал. – Léo 29 October 2013 в 13:11

Я бы рекомендовал создать новый публичный git repo и скопировать все соответствующие файлы в этот новый проект (на данный момент мы будем называть его «PUBLIC»). Сделайте свою первоначальную фиксацию PUBLIC. Это дает вам отправную точку без истории для вашего публичного репо.

Как только вы это сделаете, в будущем все ваши фиксации, которые вы хотите публиковать, должны быть переданы PUBLIC.

Теперь ваше существующее частное репо может настроить новый пульт дистанционного управления, который выталкивает из PUBLIC. Любые изменения, которые вы хотите сделать, которые должны появиться в публичном репо, должны быть переданы PUBLIC, а затем объединены в ваше частное репо.

1
ответ дан jeremy 22 August 2018 в 15:15
поделиться

имеют чистую открытую кодовую базу (все коммиты сжаты в одну)

Просто удалите текущий .git, git init, добавьте все и совершите: 1 совершите «раздавливание» всего else.

сохранить частное репо

Да, у вас даже есть услуги хостинга, такие как Bitbucket , предоставляющие бесплатные частные репозитории.

и работать с публичным репо и «слить» при необходимости на личном без каких-либо конфликтов

Если у вас нет каких-либо одновременных изменений, и слияние должно быть либо тривиальным, либо ускоренным. Это будет сделано в локальном клоне частного репо, которое затем будет перенесено на его собственный сервер хостинга.

1
ответ дан VonC 22 August 2018 в 15:15
поделиться
  • 1
    Спасибо, вот что я намеревался сделать. Но как насчет изменений pull / merge от публичного репо до частного? Будет ли это поведение работать? – Léo 28 October 2013 в 20:23
  • 2
    @ Léo, если ваш частный старт от одного и того же фиксации, как и ваш публичный, да: вы можете объявить сиротскую ветку ( stackoverflow.com/a/19582330/6309 ) для всех устаревших коммитов – VonC 28 October 2013 в 21:20
Другие вопросы по тегам:

Похожие вопросы: