Проекты в рамках проектов с помощью Мерзавца

Файл может быть загружен как вложение, а не как json.

from flask import send_file

@app.route('/download')
def downloadFile ():
    return send_file(path, as_attachment=True)
23
задан Jim Puls 31 May 2009 в 22:35
поделиться

5 ответов

Я не нашел, что подмодули особенно полезны на (маленьких) проектах, я продолжил работать. После того как Вы настроили их, работающий над целым проектом требует добавляющих дополнительных параметров почти к каждой команде, и синтаксис не является абсолютно регулярным. Я воображаю, работал ли я над большими проектами с большим количеством подмодулей, я рассматривал бы его как более выгодный компромисс.

Существует две возможности, которые сохраняют подпроекты как независимого мерзавца repos, что Вы вытягиваете от в Ваше основное (интеграция) repo:

  • Используя слияние поддерева для подачи внешних проектов в отдельные подкаталоги в основном repo, который включает базовые файлы. Это помогает обновить основной проект из внешних проектов, но сложный для передачи изменений обратно внешним проектам. Я думаю об этом как о хорошем способе включать зависимости проекта, но он не работал бы так хорошо с совместно используемыми файлами. Другое простое объяснение (исправленная ссылка).

  • Настройте каждый проект как удаленное ответвление в Вашем основном repo и слиянии от каждого из них в Ваш master ответвление (интеграции), которое также содержит Ваши базовые файлы. Это требует некоторой дисциплины: если Вы вносите какие-либо изменения во внешние проекты в Вашем основном repo, они должны быть сделаны в ответвлении и затем объединены в ведущее устройство; и Вы никогда не хотите объединиться в ответвления проекта. Это помогает передать изменения обратно внешним проектам и является совершенно приемлемым использованием ответвлений в Мерзавце.

    Ваши общие сценарии могут быть обработаны как другое независимое ответвление в Вашем основном каталоге, от которого Ваши внешние партнеры могут вытянуть и продвинуть к как удаленное ответвление.

При попытке выполнить SVN & Git в том же каталоге, Вы делаете его очень трудно для использования ветвления в любой системе, потому что SVN делает ветвление путем копирования каталогов файла, в то время как Мерзавец отслеживает указатели. Никакая система автоматически не видела бы ответвления, которые Вы делаете в другом. Я думаю, что 'решением' является больше проблемы, чем это стоит.

13
ответ дан 29 November 2019 в 03:03
поделиться

Я использовал мерзавца для сшивания вместе моего собственного GitHub размещенный проект и внешняя библиотека UI, которой я хотел пользоваться. Библиотека размещается в репозитории подверсии на SourceForge.

Я использовал подмодуль мерзавца и мерзавца-svn, и он работал обоснованно хорошо. Оборотные стороны были:

  1. Чтобы быть в курсе репозитория библиотеки, я должен был выполнить, новая фиксация для обновления мерзавца подмодуля хешируют "указатель". Это вызвано тем, что подмодули мерзавца, в отличие от svn:externals, прикрепляются к конкретному идентификатору фиксации. Это не может быть фактической оборотной стороной, если Вы на самом деле хотите прикрепить стабильную версию, я работал с кодом, который был WIP.

  2. Начальное получение по запросу мерзавца repo с подмодулями требует дополнительного шага с "подмодулем мерзавца init". Это не проблема для Вас, но для других, использующих Ваш код, который они должны будут помнить или быть сказаны выполнить этот шаг перед компиляцией/выполнением/тестированием Ваш код.

  3. При использовании командной строки, легко завинтить репозиторий с мерзавцем - добавляют. Это вызвано тем, что Вы вводите git add subm<tab> завершаться к git add submodule, но это автоматически заполняет к git add submodule/ - отметьте запаздывающую наклонную черту. Если Вы выполняете команду с запаздывающей наклонной чертой, то она бомбит подмодуль и добавляет все его содержавшие файлы вместо этого. Это смягчено при помощи мерзавца-gui, git add . или просто обучение самостоятельно для удаления наклонной черты (это произошло со мной достаточно раз, что я обучил меня удалять его),

  4. Фиксации подмодулей могут испортить перебазу мерзавцев-i. Я забываю точные детали, но это особенно плохо, если у Вас есть "грязный" подмодуль, и Вы выполняете переосновное интерактивное. Обычно с грязным деревом Вы не можете повторно базироваться, но подмодули не проверяются. Наличие нескольких фиксаций подмодуля в переосновной группе также вызывает проблемы. Последний хеш подмодуля предан первому, выбирают Ваш список, и это довольно хитро для фиксации позже. Это может работаться вокруг с более осторожным рабочим процессом (т.е. тщательно решающий, когда сделать Ваши фиксации подмодуля...), но может быть ЛАВАШ.

Шаги для установки этого были чем-то вроде:

  1. Выполненный git svn clone https://project.svn.sourceforge.net/svnroot/project/project/trunk
  2. Продвиньте это как "реальный" проект мерзавца к, например, GitHub
  3. Теперь в Вашем собственном репозитории мерзавца, выполненном git submodule init
  4. git submodule add git://github.com/project subproject
  5. Выставьте это также к Вашему собственному repo на этот раз.

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

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

cd subproject
git svn rebase
git svn push  # this updates the git mirror of the subproject
cd ..
git add subproject # careful with the trailing slash!
git commit -m "update subproject"
git push # this pushes the commit that updates the subproject

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

3
ответ дан 29 November 2019 в 03:03
поделиться

подмодуль мерзавца мог бы быть тем, что Вы ищете:

http://book.git-scm.com/5_submodules.html

http://git-scm.org/gitwiki/GitSubmoduleTutorial

1
ответ дан 29 November 2019 в 03:03
поделиться

Из того небольшого, что я прочитал о Externals , похоже, это порт SVN «внешние» для GIT.

Это решает некоторые проблемы с подмодулями GIT, включая автоматическое обновление до последней версии.

Хотя у меня нет опыта работы с внешними SVN или с этим проектом, для некоторых это может быть лучшим решением, чем для других опубликованных.

В качестве альтернативы, следующее программное обеспечение (похоже, его можно использовать с GitHub). Может быть, это еще один способ снять кожу с кошки: Коса ( Страница Softpedia )

1
ответ дан 29 November 2019 в 03:03
поделиться

Это зависит от того, над каким проектом вы работаете, и с какими инструментами, если они есть, нужно взаимодействовать ваш СКМ. Например, Rails часто использует Capistrano для развертывания, и Capistrano делает определенные предположения о том, как будет выглядеть ваша структура каталогов относительно корня вашего хранилища. В этом случае, если у вас есть несколько взаимосвязанных приложений rails, вам необходимо использовать субмодули. Каждое приложение получает свой собственный репозиторий, и тогда у вас есть большой репозиторий, который управляет каждым из независимых репозиториев как подмодулями.

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

Извлечение некоторого подраздела репозитория в качестве отдельного объекта при сохранении истории версий сложно в git, и поэтому хорошей идеей является планирование на будущее.

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

0
ответ дан 29 November 2019 в 03:03
поделиться
Другие вопросы по тегам:

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