Как переместить несколько локальных репозиториев в один из поддиректорий одного удаленного репозитория [duplicate]

Существует большая философия для этой проблемы. Проще всего сделать это, чтобы дать определенный размер шрифта телу (i recommand 10), а затем весь другой элемент будет иметь свой шрифт в em или rem. Я дам вам и пример, чтобы понять эти единицы. Em всегда относится к своему родителю

body{font-size:10px;}
.menu{font-size:2em;} /* that means 2*10px = 20px */
.menu li{font-size:1.5em;} /* that means 1.5*20px = 30px */

Rem всегда относится к телу

body{font-size:10px;}
.menu{font-size:2rem;} /* that means 2*10px = 20px */
.menu li{font-size:1.5rem;} /* that means 1.5*10px = 15px */

И чем вы могли бы создать скрипт, который изменил бы размер шрифта относительно вашего контейнера ширина. Но это не то, что я бы рекомендовал. Потому что в контейнере ширины 900px, например, у вас будет элемент p с размером шрифта 12px, скажем так. И на вашей идее, которая станет на контейнере шириной 300 пикселей с размером шрифта 4px. Должен быть нижний предел. Другие решения были бы с медиа-запросами, так что вы могли бы установить шрифт для разных ширины.

Но решения, которые я бы рекомендовал, это использовать библиотеку javascript, которая поможет вам в этом. И fittext.js , который я нашел до сих пор.

91
задан Simon East 21 January 2016 в 07:49
поделиться

4 ответа

С помощью git-subtree есть еще более простой способ. Предполагая, что вы хотите, чтобы ваша папка «выводила» в качестве корня в Heroku, вы можете сделать:

git subtree push --prefix output heroku master

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

161
ответ дан Drew Stephens 19 August 2018 в 07:35
поделиться
  • 1
    Он доступен в git 1.7.11 и выше. – g10 21 December 2012 в 01:47
  • 2
    Да, но поддерево по-прежнему (с 1.8.0.2) не включено через установщик git . К счастью, установка из источника выполняется быстро и просто, эта страница работала для меня на Mac. – dribnet 30 December 2012 в 00:19
  • 3
    Если вам нужно --force, используйте git push heroku `git subtree split --prefix output master`:master --force. См. stackoverflow.com/a/15623469/2066546 . – fiedl 7 November 2014 в 22:24
  • 4
    Но каков правильный способ нажатия определенного тега. Я думал, что это должно быть git subtree push --prefix output heroku +refs/tags/v1.0.0:refs/heads/master. Но это не работает и возвращается с +refs/tags/v1.0.0:refs/heads/master does not look like a ref. Мне нужна такая функциональность, чтобы позднее можно было использовать роль конкретных тегов. Каков правильный способ сделать это? – and-dev 4 December 2014 в 09:37
  • 5
    Я получаю сообщение об ошибке «Обновления были отклонены, потому что нажатый ответчик ветки за его удаленным» – Ally 23 March 2017 в 04:11

После долгого и трудного месяца, когда я пытаюсь разузнавать разные вещи и укусаться каждый раз, когда понял,

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

он мог бы быть rsync так же хорошо, они пошли на git, не отвлекайтесь из-за этого

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

  1. он требует, чтобы что-то делалось каждый раз, или периодически, или случались неожиданные вещи (нажатие подмодулей, синхронизация поддеревья, ...)
  2. , если вы используете двигатель, например, для модуляции вашего кода, Bundler будет есть вас в живых, невозможно описать количество разочарования, которое у меня было с этим проектом во время квеста, чтобы найти хорошее решение для этого, которое вы пытаетесь добавить двигатель как ссылка git repo + bundle deploy - сбой, вам нужно связывать обновление каждый раз, когда вы пытаетесь добавить движок в качестве :path + bundle deploy - fail, команда dev считает :path опцией «вы», не используя Bundler с этой опцией gem ", поэтому он также не будет поставляться для производства, при каждом обновлении движка требуется обновить решение rails stack -_-
  3. , которое я нашел, это использовать движок в качестве символической ссылки /vendor в разработке и фактически копировать файлы для производства

Решение

В рассматриваемом приложении есть 4 проекта в git root:

  1. api - в зависимости от профиля будет работать на двух разных сайтах heroku - загрузить и api
  2. web - веб-сайт
  3. web-old - старый веб-сайт, все еще в процессе миграции
  4. common - общие компоненты, извлеченные в движке

Все проекты имеют символическую ссылку vendor/common, смотрящую на корень механизма common , При компиляции исходного кода для развертывания в heroku нам необходимо удалить symlink и rsync, чтобы его физически находить в папке поставщика каждого отдельного хоста.

  1. принимает список имен хостов в качестве аргументов
  2. запускает git-push в вашем репо-процессе разработки, а затем запускает чистый git-pull в отдельной папке, следя за тем, чтобы никакие грязные (неуправляемые) изменения не были перенесены на хосты автоматически.
  3. развертывает хосты параллельно - все героиня git repo потянута, новый код rsynced в нужные места, в конце концов, с базой данных push в комментарии git commit,
  4. , мы отправляем ping с завитком, чтобы сообщить хобби хостам просыпаться и ловить журналы, чтобы увидеть, все ли вино
  5. хорошо играет с дженкинсами: D (автоматический ввод кода для тестирования серверов после успешных тестов)

Работает очень очень приятно в дикой природе с минимальными (нет?) проблемами 6 месяцев

Вот сценарий https://gist.github.com/bbozo/fafa2bbb8c7b12d923f [/ g 28]

Обновление 1

@AdamBuczynski, это никогда не бывает так просто.

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

2nd вы захотите разделить код между проектами - теперь приходит часть sync_common, shennanigans с символическими ссылками в разработка заменена фактическим rsynced кодом на Heroku, потому что Heroku требует определенной структуры папок, а bundler и rubygems действительно действительно действительно делают вещи ужасно очень плохо, если вы хотите извлечь общие потоки в gem

3rd, что вам нужно чтобы подключить CI, и он немного изменится по мере того, как должны быть организованы подпапки и git-репо, в конце концов, в самом простом случае использования вы получите вышеупомянутый смысл.

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

. Я действительно должен рассмотреть возможность объединения вещей в Rakefile или что-то еще и сделать все так ...

2
ответ дан bbozo 19 August 2018 в 07:35
поделиться
  • 1
    Привет @bbozo, не могли бы вы немного сконцентрироваться на своем решении и сделать его конкретным в случае использования одной конкретной подпапки для одного конкретного проекта heroku и вытащить все материалы, которые не нужны / специфичны для Heroku? – Adam Reis 20 August 2016 в 04:20
  • 2
    @AdamBuczynski см. Обновленный ответ :) – bbozo 20 August 2016 в 17:23
  • 3
    Спасибо за обновление вашего ответа. Я думаю, что я просто запустил пулю и разделил код клиента и сервера на отдельные репозитории. Не идеальна для нашей ситуации, но она будет превзойти принудительные подделки, которые мы должны сделать сейчас, и из того, что я собираю, также будет намного проще, чем пытаться использовать символические ссылки. – Adam Reis 21 August 2016 в 19:10
  • 4
    Не бойтесь «сценария развертывания», он окупается – bbozo 21 August 2016 в 19:48

У меня была аналогичная проблема. В моем случае никогда не было проблемой сдуть все в репозитории heroku и заменить его тем, что находится в моем подкаталоге. Если это ваш случай, вы можете использовать следующий сценарий bash. Просто поставьте его в свой каталог приложений Rails.

#!/bin/bash

#change to whichever directory this lives in
cd "$( dirname "$0" )"

#create new git repository and add everything
git init
git add .
git commit -m"init"
git remote add heroku git@heroku.com:young-rain-5086.git

#pull heroku but then checkback out our current local master and mark everything as merged
git pull heroku master
git checkout --ours .
git add -u
git commit -m"merged"

#push back to heroku, open web browser, and remove git repository
git push heroku master
heroku open
rm -fr .git

#go back to wherever we started.
cd -

Я уверен, что есть много способов улучшить это - так что не стесняйтесь рассказывать мне, как это сделать!

8
ответ дан JnBrymn 19 August 2018 в 07:35
поделиться
  • 1
    +1 Спасибо. Это решение отлично работает, если вы не заботитесь о git logs на Heroku. Можно выполнить настройку над сценарием в случае, если есть некоторые папки, которые вы хотите игнорировать, в рамках вспомогательного пути приложения для развертывания. Например, я не хотел папку spec на героку. Пример Gist – ch4nd4n 6 November 2012 в 15:19
  • 2
    +1, но вы можете упростить, не вытягивая и не сливаясь в masterk героя, а вместо этого просто git push --force heroku master – M.K. Safi 5 April 2015 в 01:42

Я начал с того, что сказал Джон Берриман, но на самом деле это может быть проще, если вы вообще не заботитесь о истории героев.

cd bin
git init
git add .
git commit -m"deploy"
git push git@heroku.com:your-project-name.git -f
rm -fr .git

Я думаю, что официальный git subtree - лучший ответ, но у меня возникла проблема с поддеревом для работы с моим mac.

7
ответ дан LessQuesar 19 August 2018 в 07:35
поделиться
Другие вопросы по тегам:

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