Оформити замовлення файлів Git до місця за межами сховища


21

Чи можна "здійснити заїзд" до місця поза сховищем? Що я маю на увазі - це клон гілки без каталогу .git.

Наприклад: Використовуйте git для управління веб-сайтом. Ви редагуєте деякі файли, фіксуєте та копіюєте файли на веб-сервері через WebDAV. WebDAV-шлях буде розташуватися поза сховищем, яке не повинно містити ".git".

Це може бути не проблема, для якої було побудовано git, але чи це можливо?

Відповіді:


19

Так, це, безумовно, можливо.

Скажімо, у мене є голе сховище, назване /srv/production.gitна цільовій системі / сервері.

У системі призначення я можу використовувати команду cd /srv/production.git; GIT_WORK_TREE=/srv/production-www/ git checkout -f

Якщо я перебуваю в неоголеному сховищі, команда дещо відрізняється. Скажімо, у мене є непогашений сховище /srv/testing. Оформити замовлення, що я б використовувавcd /srv/testing/.git; GIT_WORK_TREE=/srv/production-www/ git checkout -f

Насправді в моїй системі я навіть автоматизую це в гачку після фіксації у своєму production.gitсховищі. Тож, коли ви переходите на production.gitостанню версію, автоматично перейдіть на веб-корінь.

#!/bin/sh
#
# An example hook script that is called after a successful
# commit is made.
#
# To enable this hook, rename this file to "post-commit".

GIT_WORK_TREE=/srv/production-www/ git checkout -f
# ... misc other commands to verify permissions are set correctly.

Якщо ваш єдиний доступ до віддаленої системи - webdav, то, безумовно, має бути можливість написати гачок після завершення, який буде оформляти замовлення на хост webdav, безпосередньо або у тимчасове місце, яке ви зможете зафіксувати після завантаження.


Шукали в багатьох місцях .. тільки робоче рішення, також чисте!
karthikeayan

6

Якщо ви просто хочете файли, ви можете використовувати git archive. Зазвичай він записує в архів, як-от tarballs або ZIP, але ви також можете передавати його:

git archive master | tar -x -C /some/path

Тут, masterочевидно, є гілка, яку ви хочете архівувати, і /some/pathбуде містити лише файли - ні .gitабо .gitignore.


Або ви можете використовувати, git checkout-indexякий більше нагадує "замовлення" файлів:

git checkout-index -f -a --prefix=/some/path/

Ось -a параметр пропонує gitперевірити всі файли. Префікс буде попередньо виведений. Хтось також написав обгортку навколо цього, щоб дати git export.


2
Я думаю, що ти робиш це складніше, ніж потрібно. Просто запустіть, GIT_WORK_TREE=/destinationpath git checkout -fпоки ваш поточний каталог знаходиться у верхній частині голого сховища або підкаталогу .git. Ви отримаєте виїзд на / в пункт призначення
Зоредаче

Гаразд, я мабуть якось пропустив цей варіант, +1 вам.
slhck

1
Я вважаю цей варіант способом більш інтуїтивним, якщо чесно. І менш схильні до помилок.
Мінікс
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.