2013-04-18 3 views
8

Есть ли способ подтолкнуть фиксацию к удаленному git-репо, не создав локальный клон этого репо?Как обновить файл в удаленном репо, не клонируя это репо?

У меня есть действительный URL-адрес удаленного репо, я знаю путь к файлу, и все, что я хочу сделать, это нажать обновленную версию файла на мастер. В идеале мне бы хотелось, чтобы это работало с любым допустимым URL-адресом удаленного репо, но все равно было бы полезно, если бы оно работало только с htt-адресами https.

Я предполагаю, что это невозможно, поскольку, как представляется, невозможно даже получить один файл без клонирования в общем случае в соответствии с ответом How to "git show" on a remote repo?. Но я надеюсь, что есть обходной путь, который использует некоторые команды нижнего уровня git.

+1

Не думайте, что это возможно, и не обязательно, зачем вам редактировать файлы, не имея всего репо в первую очередь? –

+1

Если удаленное репо размещено в [github] (http://github.com), вы можете отредактировать файл прямо там. В противном случае я не думаю, что это возможно. –

+1

@ MadaraUchiha Почему? Потому что иногда вам нужно лишь внести небольшое изменение в массивное репо, и это требует много времени, чтобы клонировать все это. В моем случае приложение управления должно обновлять метаданные, содержащиеся в сотнях репозиториев git, но не хочет поддерживать локальные копии всех из них только для этой цели. – algal

ответ

7

Невозможно. Но так как предполагаемая фиксация просто должна иметь одно фиксированное сообщение в качестве ее родителя, можно использовать так называемое «мелкое клонирование» и получить только завершение наконечника ветви, в которой вы нуждаетесь. Это приведет к минимальному количеству объектов с пульта. Найдите --depth вариант командной строки git clone.

+0

Интересная особенность! Страницы человека говорят, что: вы не можете клонировать или извлекать из него **, а также не нажимать и не нажимать **.Поэтому, даже если вы можете использовать это для создания патча и отправлять патч по отдельности, это не поможет вам с автоматическим нажатием изменений. – Shahbaz

+0

@Shahbaz На самом деле это не так, вы можете оттолкнуться от него просто ... – poke

+0

@poke, я не пробовал, но если вы уверены, рассмотрите вопрос об отправке отчета об ошибке на странице руководства. – Shahbaz

3

Нет, я не думаю, что это возможно. Для этого вам нужно клонировать весь репозиторий. Git должен знать обо всех файлах и .git для правильной работы. Вот почему вы не можете просто выталкивать произвольные файлы.

1

@algal, для вашего конкретного прецедента, вы можете использовать подмодуль (http://git-scm.com/docs/git-submodule) . Вы можете клонировать и передавать субмодулю без клонирования «супермодуля», который может содержать «массивный» код, который вы упомянули. Супермодуль может ссылаться на подмодуль для указанной вами конфигурации.

0

Да, вы можете нажать на новую версию с помощью tagging

следить за этим шаги

в новом корневом каталоге проекта

  1. git init
  2. git remote add origin [email protected]:yourusername/yourpoject
  3. git tag -a v2.0 -m 'version 2.0'
  4. git add .
  5. git commit -m "New Version 2.0 :rocket:"
  6. git push -u origin v2.0

теперь у вас есть новый филиал под названием v2.0 с новым проектом и ваш мастер филиала остается нетронутым. После этого, если вы не сможете изменить свою ветку по умолчанию в своих настройках проекта github.

Смежные вопросы