Как создать Pushable Git репозиторий, который также толкает файлы?

Я имею <path1> в /f/gittest/foo (дистанционный пульт). я имею <path2> в /f/gittest/bar (местный).

Поскольку сейчас мне не нужен удаленный доступ к рабочей копии, в основном из-за того, что я не могу вставить активную ветку, я сделал ее голой.

Я иду и создаю каталог.git и запускаю git init --bare внутри /f/gittest/foo/.git, Я захожу и добавляю удаленный репо в локальный репозиторий, создаю файлы, добавляю, фиксирую и отправляю на удаленный репозиторий. Изменения появляются, чтобы нажать, и пульт успешно обновлен. Однако файлы, отслеживаемые локальным хранилищем (скажем, example1.txt и example2.txt), не отображаются на удаленном компьютере (хотя, я полагаю, отслеживаются в удаленном хранилище). Как мне получить этот удаленный каталог, который будет обновляться с файлами, которые были переданы? Раньше мне удавалось с этим без извлечения и без зеркалирования, хотя я не могу вспомнить, как.

Дважды проверил поведение:mkdir alpha/; mkdir beta/; cd beta/

mkdir .git/; cd .git/; git init --bare; cd ../../alpha/

git init; touch example1.txt (Введите текст в example1.txt)

git add example1.txt; git commit -m "Initial Commit"

git remote add destination ../beta/.git; git push destination master

3 ответа

Пустой репозиторий не имеет извлеченной версии и поэтому будет отслеживать только все файлы, но не отображать их в каталоге. Если вы хотите, чтобы папка с последней фиксацией вашего репозитория была извлечена, я бы предложил иметь отдельное дерево, которое проверяется с помощью git hook после нажатия.

Смотрите здесь Git Post-Receive Hook для создания сайта

Если вы создаете каталог

mkdir some_dir
cd some_dir

и инициализировать голый репозиторий,

git init --bare
git remote add origin git@github.com:username/reponame.git

Затем вы создаете некоторые файлы там, скажем

echo "some_text" > somefile.txt
echo "some_text" > somefile1.txt

Если вы нажмете на этом этапе, они не будут отражены в вашем удаленном хранилище.

Вместо этого, если вы совершите,

git add .
# Even if you push at this stage, you wont see the files in remote git server
git commit -m "Pushing to git server"

Они будут отражены на удаленном сервере git.

РЕДАКТИРОВАТЬ:

Вы не можете создать голое репо на сервере так, как вы создаете локальное репо. Это зависит от удаленного сервера Git, чтобы справиться с этой ситуацией. Например, github, вы можете создать голое репо из их пользовательского интерфейса, или они предоставляют API для этого. Эта тема может быть актуальной. Можно ли создать удаленный репозиторий на GitHub из CLI, не открывая браузер?

Во-первых, создание голого репо в течение .git папка не является обычной практикой:

  • .git является папкой для непроявленного репо (папка с рабочим деревом, расположенная в родительской папке .git)
  • foo.git будет имя папки голого репоfoo".

Во-вторых, нажатие на пустое хранилище означает, что файлы никогда не будут "отображаться": голое хранилище - это всего лишь попытка избежать синхронизации рабочего дерева.

Вместо этого вы можете добавить в свой репо post-receive крюк:

export GIT_WORK_TREE=..
git checkout -f HEAD

(как я уже упоминал в " Где файлы проекта хранятся в репозитории git.git папка?")

Другие вопросы по тегам