Подтвердить что ты не робот

Git: Оформить только файлы без репозитория?

Мне бы хотелось просто проверить файлы без файлов .git и всего репозитория. Это потому, что я хотел бы управлять веб-сайтом (php и html) с помощью git, и я ищу простой способ обновления файлов в папке htdocs из репозитория без публичного репозитория. (теперь он находится в домашнем каталоге и доступен через ssh, но я должен вручную поместить новые файлы в htdocs.

4b9b3361

Ответ 1

git-archive manpage содержит следующий пример:

git archive --format=tar --prefix=junk/ HEAD | (cd /var/tmp/ && tar xf -)

Создайте tar-архив, содержащий содержимое последней фиксации в текущей ветке, и извлеките его в каталог "/var/tmp/junk".

Или вы можете использовать низкоуровневый git-checkout-index, manpage содержит следующий пример:

Использование git checkout-index для "экспорта всего дерева"

Функция префикса в основном делает тривиальным использование 'git checkout-index' в качестве функции "экспорт как дерево". Просто прочитайте нужное дерево в индексе и сделайте

   $ git checkout-index --prefix=git-export-dir/ -a
     

git checkout-index будет "экспортировать" индекс в указанный каталог.

     

Финал "/" важен. Экспортированное имя буквально просто префикс указанной строки.

Или вы можете попробовать использовать опцию --work-tree для оболочки git или для переменной среды GIT_WORK_TREE, например. используя "git --work-tree=/somwehere/else checkout -- .".

Ответ 2

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

В Linux/OSX это будет:

mkdir dist && cd dist
git checkout --depth=1 http://path/to/your/project.git
rm -rf .git

Ответ 3

git clone --depth 1 делает именно то, что вы хотите. У меня есть репозиторий git с 41 000 коммитов, и это намного быстрее. См. этот ответ или этот более общий ответ для более подробного объяснения.

Если вы хотите указать ветку для использования (вместо ветки "master" по умолчанию), используйте этот синтаксис (требуется git 1.9 +):

git clone -b <remoteBranch> --single-branch --depth 1 ssh://[email protected]:serverport/PathToProject <FolderName>

Ответ 4

Вы можете создать архив tar в рабочем каталоге git и скопировать tar на сервер:

git archive -o foo.tar HEAD
scp foo.tar server:

Ответ 5

Развернув ответ seanhodges, вы можете просто rsync файлы проекта туда, где вам нужно их поместить, и использовать -exclude, чтобы избежать использования каталога .git.

rsync -avz --exclude=.git /source/directory/ [email protected]:/target-directory

Я не тестировал эту команду, поэтому не стесняйтесь ее редактировать, но вы получаете jist.

Полезной возможностью является добавить -dry-run в конец команды, которая покажет вам, какие файлы будут отправлены без каких-либо изменений.

Ответ 6

Вероятно, вы выиграли бы от голого репо и после приема.

Этот метод полезен, если вы хотите направить изменения на свой сервер, но не хотите, чтобы сами htdocs находились под контролем версий.

Мы создадим папку для голого репо. Мне нравится помещать его в ту же родительскую папку, что и htdocs:

mkdir barerepo.git
cd barerepo.git
git --bare init 

Затем создайте файл hook-post-receive, сделайте его исполняемым:

touch hooks/post-receive
chmod ug+x hooks/post-receive

Редактировать пост-прием в вашем любимом текстовом редакторе:

GIT_WORK_TREE=/full/path/to/htdocs git checkout -f
# optional stuff:
cd down/to/some/directory
[do some stuff]

Теперь каждый раз, когда вы нажимаете на это голое репо, он проверяет рабочее дерево на htdocs. Но сам htdocs не находится под контролем версий; запуск git status в htdocs даст ошибку fatal: Not a git repository (or any parent up to mount point/data). Это просто файлы.

Обратите внимание, что вы всегда должны нажать от мастера для этого, чтобы работать, иначе git checkout не будет знать, какая ветка для проверки.