Как отправить конфиденциальные файлы в Heroku, но не на Github? - PullRequest
0 голосов
/ 11 марта 2019

У меня есть проект, который развернут на Heroku, и я хотел бы сделать общедоступную версию для Github.Проблема в том, что существует папка libs, которая содержит несколько файлов .js и должна быть отправлена ​​в Heroku, но не в Github.Очевидно, что конфигурация Heroku CLI с не является ответом, так как у меня есть скрытые файлы, а не только ключи API.

Итак, как я могу перенести полный проект в Heroku, но только частичный проект в Github?Большинство ответов, которые я нашел, говорили о CLI Heroku, который не может быть применен в моем случае, потому что я пытаюсь скрыть файлы, а не ключи, и другой довольно хардкорный ответ должен был сначала нажать, чтобы получить githubветка, на которой я бы git cherry-pick коммитит на ветку героку.До сих пор я использовал предыдущий ответ, но довольно сложно всегда повторять эту процедуру (по крайней мере git checkout github -> git cherry-pick COMMIT-ID) и что-то портит историю.

Итак, я попытался сделать хук после коммита, чтобы каждый раз, когда я совершал коммит на master (heroku), он переключался на ветку github, cherry-pick коммит, а затем возвращался к master, чтобы процедуравыглядеть безупречноК сожалению, это работает только иногда, но глюки мерзнут больше всего на свете.

branch=`git branch | grep \* | cut -d ' ' -f2`

if [ "$branch" = "master" ]
then
    echo "Executing post-commit script (cherry-pick)..."
    commitID=`git rev-parse HEAD`

    git checkout Github
    git cherry-pick $commitID 
    git checkout master

    echo "Cherry picked $commitID into Github branch"
fi

РЕДАКТИРОВАТЬ: Кажется, что ловушка после фиксации, кажется, работает большую часть времени сейчас.Я думаю, что проблемы возникают, когда я фиксирую через VSCode, но если я фиксирую через терминал, он работает чисто без странного поведения ... Тем не менее, было бы неплохо иметь, возможно, более безопасный способ сделать это.

Ответы [ 2 ]

1 голос
/ 12 марта 2019

Работайте над master и объединяйте master в heroku, когда вам нужно нажать.Когда вам нужно что-то изменить для Heroku, переключитесь на heroku и зафиксируйте его там.Я не могу придумать лучшего решения.

*   8a5767e (HEAD -> heroku) Merge branch 'master' into heroku
|\
| * 12fcd68 (master) Change public.js
* | 54db1a6 Add secret files (e.g. `/libs`)
|/
* 8aa2e42 Init
0 голосов
/ 16 марта 2019

Поскольку на этот пост не было получено ни одного ответа, соответствующего моим потребностям, с тех пор я оставил свое решение по сбору вишни с помощью git hook.С тех пор я улучшил его, и до сих пор он работал просто отлично.Вот мой post-commit крючок.Вы можете отредактировать переменные heroku и github в соответствии с именами ваших веток (heroku является частной веткой, github является публичной).При фиксации на ветке heroku, в моем случае master, ловушка переключится на ветку github и выберет коммит в нее, а затем переключится обратно на master.Все происходит так быстро, что вы даже не замечаете переключения!Все, что вам нужно сделать, это подтолкнуть свою работу, когда вы будете готовы!

#!/bin/sh

# After each commit on master (Heroku), it will switch to the Github branch and cherry-pick that commit into it. Then, switch back to master.
# This makes the committing flow seamless so all you have to do is push (which is safer done manually than with a hook)
# IMPORTANT: ANY changes in sensitive files should be commited alone (without public changes) or the sensitive files will be cherry picked in the public branch
# To skip this cherry-picking procedure (when you add a sensitive commit), start the commit message with "NCP" e.g.: "NCP Add some secret stuff"

ERR='\e[31m'
SUCCESS='\e[32m'
WARN='\e[33m'
space="\n\n\n"

branch=`git branch | grep \* | cut -d ' ' -f2`
heroku="master"
github="Github"

if [ "$branch" = $heroku ]
then
    echo -e $space

    message=`git log -1 --pretty=%B`
    if [[ $message = NCP* ]]; then
        echo -e "${WARN}NOT cherry-picking (commit message starts with 'NCP')"
        echo -e $space
        exit 0;
    fi

    echo -e "${WARN}Executing post-commit script (cherry-pick)..."
    commitID=`git rev-parse HEAD`

    if git checkout $github; then
        if git cherry-pick $commitID; then
            echo -e "${SUCCESS}Cherry picked $commitID into $github branch"
            if ! git checkout $heroku; then
                echo -e "${ERR}Couldn't checout to $heroku"
                echo -e $space
                exit 1
            fi
        else
            echo -e "${ERR}Failed to cherry pick $commitID into $github branch. Do it manually"
            echo -e $space
            exit 1
        fi
    else
        echo -e "${ERR}Couldn't checkout to $github"
        echo -e $space
        exit 1
    fi

    echo -e $space
fi

exit 0

ОТКАЗ ОТ ОТВЕТСТВЕННОСТИ: Я абсолютный новичок в написании сценариев bash, это буквально первый сценарий, который я написал за 2 года!Но я надеюсь, что это будет достаточно для ваших нужд, так как для меня!

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