Вы, вероятно, использовали бы модуль подпроцесса . Что-то вроде этого:
import subprocess
p = subprocess.Popen(["scp", myfile, destination])
sts = os.waitpid(p.pid, 0)
, Где destination
, вероятно, имеет форму user@remotehost:remotepath
. Благодаря @Charles Duffy для указания на слабость в моем исходном ответе, который использовал единственный аргумент строки для определения scp операции shell=True
- который не обработает пробел в путях.
документация модуля имеет примеры проверки ошибок, которую можно хотеть выполнить в сочетании с этой операцией.
Гарантируют, что Вы настроили надлежащие учетные данные так, чтобы можно было выполнить необслуживаемый, passwordless scp между машинами . Уже существует stackoverflow вопрос для этого .
Вы всегда можете использовать « git remote add
», чтобы добавить больше репозиториев в качестве источника.
Возможно, вас заинтересует функциональность git-submodule . Цитата из здесь :
Поддержка подмодулей Git позволяет репозиторий в качестве подкаталог, проверка внешний проект. Подмодули поддерживают их собственная идентичность; подмодуль поддержка просто сохраняет подмодуль расположение репозитория и идентификатор фиксации, поэтому другие разработчики, которые клонируют содержащий проект («суперпроект») можно легко клонировать все подмодули в та же доработка. Частичное оформление заказа суперпроекта возможны: вы может сказать Git не клонировать ничего, некоторые или все подмодули.
Я думаю, мне следует использовать стратегию слияния поддеревьев . Мне придется попробовать это и посмотреть, хорошо ли он работает. Я отмечу этот ответ как принятый, если это окажется хорошим подходом.
А пока я все еще открыт для предложений.
Есть одна возможность, которую я никогда не пробовал "по-настоящему", но она может хорошо сработать.
Допустим, у вас есть три проекта с творческими названиями Proj1 , Proj2 и (угадайте) Proj3 . Предположим также, что все или некоторые из них зависят от внешних библиотек, например, одна называется Lib1.dll , а другая называется SuperLib.dll .
Во-первых, для структуры папок, Я бы сделал что-то вроде:
MyCode\
build_all.bat
Docs\
[...]
Libs\
Lib1.dll
SuperLib.dll
Proj1\
[...]
Proj2\
[...]
Proj3\
[...]
Затем вы должны создать по одному репозиторию для каждой из папок ProjX:
cd \MyCode\Proj1
git init
cd \MyCode\Proj2
git init
cd \MyCode\Proj3
git init
Затем вы создадите репозиторий для всего этого:
cd \MyCode
git init
Содержимое этого репозитория, для git, будет это папка Libs
и ее содержимое, сценарий сборки build_all.bat
и 3 подпроекта.
Итак, как только вы измените исходный код, скажем, Proj1 \ Main.cs
, все не увидит изменений. Вам нужно будет выполнить git commit
на Proj1, а затем перейти к целому , а затем git commit
it (теперь git сможет увидеть, что Proj1 был изменен).
Используя этот метод, в истории всего объекта будет просто указано, когда ProjX был изменен, но он не будет напрямую отслеживать отдельные файлы. Однако, как и ожидалось, репозиторий на ProjX будет отслеживать каждый файл, как обычно.
Если вы попробуете его на «реальном проекте», дайте мне знать результаты!
Удачи!
не вижу модификации. Вам нужно будет выполнить git commit
на Proj1, а затем перейти к целому , а затем git commit
it (теперь git сможет увидеть, что Proj1 был изменен).
Используя этот метод, в истории всего объекта будет просто указано, когда ProjX был изменен, но он не будет напрямую отслеживать отдельные файлы. Однако, как и ожидалось, репозиторий на ProjX будет отслеживать каждый файл, как обычно.
Если вы попробуете его на «реальном проекте», дайте мне знать результаты!
Удачи!
не вижу модификации. Вам нужно будет выполнить git commit
на Proj1, а затем перейти к целому , а затем git commit
it (теперь git сможет увидеть, что Proj1 был изменен).
Используя этот метод, в истории всего объекта будет просто указано, когда ProjX был изменен, но он не будет напрямую отслеживать отдельные файлы. Однако, как и ожидалось, репозиторий на ProjX будет отслеживать каждый файл, как обычно.
Если вы попробуете его на «реальном проекте», дайте мне знать результаты!
Удачи!
Используя этот метод, в истории всего будет просто указано, когда ProjX был изменен, но он не будет напрямую отслеживать отдельные файлы. Однако, как и ожидалось, репозиторий на ProjX будет отслеживать каждый файл, как обычно.
Если вы попробуете его на «реальном проекте», дайте мне знать результаты!
Удачи!
Используя этот метод, в истории всего будет просто указано, когда ProjX был изменен, но он не будет напрямую отслеживать отдельные файлы. Однако, как и ожидалось, репозиторий на ProjX будет отслеживать каждый файл, как обычно.
Если вы попробуете его в «реальном проекте», дайте мне знать результаты!
Удачи!