Как добавить файл в удаленный Git repo (Github) без клонирования всего репо первого
Этот вопрос Git очень похож на другой вопрос о SVN.
У меня есть репо, полное больших файлов, и мне нужно добавить к нему один файл. Это было очень легко в SVN.
svn import -m "Adding just a file" file_name http://path/to/svn/repo/file_name
Как достичь этой простой задачи в Git?
Ответы
Ответ 1
Это невозможно. Я только что проверил следующее:
-
mkdir hello_independent
(примечание: "hello" - мое предыдущее имя репозитория) -
git init
(примечание: создайте репозиторий с пустым здесь) -
git remote set-url origin https://github.com/solio/GitPractice.git
(обратите внимание: установите локальный репозиторий в удаленный репозиторий.) -
vim newfilefromindependentfolder.md
(примечание: добавьте новый файл) -
git add --a
-
git commit -m "test commit from independent folder."
-
git push origin master
(примечание: эта операция является ключом)
он покажет эту ошибку: (извините, я не могу загрузить изображение моей операции и сообщение подсказки без 10 репутации)
вот мое понимание сообщения: когда я это делаю, есть два разных независимого рабочего процесса, они не имеют ничего отношения. Поэтому, когда вы хотите передать независимые файлы в удаленный репозиторий, вы должны объединить локальный репозиторий и удаленный. способ решить это git clone удаленный репозиторий.
Ответ 2
Для GitHub, по крайней мере (не git
), API GitHub предоставляет способ создания файла без клонирования:
https://developer.github.com/v3/repos/contents/#create-a-file
PUT /repos/:owner/:repo/contents/:path
# Parameters #
----------------------------------------------------------------
Name Type Description
------ ------ -----------------------------------------------
path string Required. The content path.
message string Required. The commit message.
content string Required. The new file content, Base64-encoded.
branch string Branch name. Default: repo default branch.
Минимальный пример ввода JSON:
{
"message": "my commit message",
"content": "bXkgbmV3IGZpbGUgY29udGVudHM="
}
Таким образом, вы можете написать скрипт для base64-кодирования содержимого файла, а затем использовать curl
или такой, чтобы отправить некоторый JSON, например выше, на https://api.github.com/repos/:owner/:repo/contents/:path
Если это удастся, вы получите ответ JSON, который включает URL-адреса GitHub для созданного файла.
Можно также обновлять файлы без клонирования: https://developer.github.com/v3/repos/contents/#update-a-file
Ответ 3
Репо включает в себя набор довольно жирных двоичных файлов
Это не то, что предназначено для создания git-репо, как я объяснил здесь.
Вы не можете проталкивать что-то, не загрузившись первым, поэтому, если ваше репо не размещено в службе, которая поддерживает добавление файлов через свой веб-интерфейс ( например, GitHub, как прокомментировал heinrich5991), вы не сможете импортировать только один файл.
Одна из альтернатив будет заключаться в том, чтобы выделенный сервер, на котором размещался полный экземпляр вашего репо, в который вы могли добавить один файл, и из которого вы могли бы перейти к целевому репо.