Как нажать на не-голый репозиторий Git?



Я обычно работаю на удаленном сервере через ssh (экран и vim), где у меня есть репозиторий Git. Иногда я не в сети, поэтому у меня есть отдельный репозиторий (клонированный с моего пульта дистанционного управления) на моем ноутбуке.



однако, я не могу вытащить из этого репозитория на удаленной стороне, потому что я обычно за брандмауэром или у меня нет публичного IP.



Я читал, что я должен нажать просто на "голый" репозиторий. Как я должен затем переместить мои изменения в мой удаленный репозиторий?

547   5  

5 ответов:

receive.denyCurrentBranch updateInstead

это добавил в Git 2.3, и это заставляет сервер обновлять свое рабочее дерево, если оно чистое.

поэтому, если вы гарантируете, что вы всегда фиксируете, прежде чем тянуть локально, и держите чистое рабочее дерево на сервере (что вы должны сделать, чтобы избежать конфликтов слияния), то этот вариант является хорошим решением.

пример использования:

git init server
cd server
touch a
git add .
git commit -m 0
git config --local receive.denyCurrentBranch updateInstead

cd ..
git clone server local
cd local
touch b
git add .
git commit -m 1
git push origin master:master

cd ../server
ls

выход:

a
b

Оптимальный Вариант

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

давайте рассмотрим самый простой случай и предположим, что у вас есть только одна ветвь в каждом РЕПО: master. Когда вы нажимаете на удаленное РЕПО с вашего ноутбука, вместо нажатия master - > master, нажмите master- > laptop-master (или аналогичное имя). Таким образом push не влияет на текущую извлеченную главную ветвь в удаленном РЕПО. Чтобы сделать это с ноутбука, команда довольно проста:

git push origin master:laptop-master

это означает, что локальная главная ветвь будет перенесена в ветвь с именем "laptop-master" в удаленном репозитории. В вашем удаленном РЕПО у вас будет новая ветвь с именем "laptop-master", которую вы можете объединить в свой удаленный мастер, когда будете готовы.

Альтернативный Вариант

Он также можно просто нажать master - > master, но нажатие на текущую проверенную ветвь не-голого РЕПО обычно не рекомендуется, потому что это может сбить с толку, если вы не понимаете, что происходит. Это связано с тем, что нажатие на извлеченную ветвь не обновляет дерево работы, поэтому проверка git status в извлеченной ветви, которая была нажата, будут показаны точно противоположные различия, как то, что было нажато совсем недавно. Это было бы особенно запутанным, если бы дерево работы было грязным раньше толчок был сделан, что является большой причиной, почему это не рекомендуется.

если вы хотите попробовать просто нажать master - > master, то команда просто:

git push origin

но когда вы вернетесь к удаленному РЕПО, вы, скорее всего, хотите сделать git reset --hard HEAD чтобы синхронизировать дерево работ с содержимым, которое было нажато. это может быть опасно, потому что если они есть uncommitted изменения в дереве удаленной работы, которое вы хотели сохранить, будут уничтожить их. Убедитесь, что вы знаете, каковы последствия этого, прежде чем попробовать его, или по крайней мере сделать резервную копию в первую очередь!

EDIT поскольку git 2.3, вы можете использовать "толчок к развертыванию" ГИТ пуш: https://github.com/blog/1957-git-2-3-has-been-released. Но нажимать на отдельную ветку, а затем, сливаясь, как правило, лучше, так как это реальное объединение (следовательно работает с незафиксированные изменения, как слияние).

Я бы предложил иметь голый репозиторий и локальные рабочие (не голые) репозитории на вашем сервере. Вы можете нажать изменения с ноутбука на сервер голого РЕПО, а затем вытащить из этого голого РЕПО на сервер рабочего РЕПО. Причина, по которой я говорю это, заключается в том, что у вас может быть много полных/неполных ветвей на сервере, которые вы захотите реплицировать на ноутбуке.

таким образом, вам не нужно беспокоиться о состоянии ветви, проверенной на сервере, работающем с РЕПО, при нажатии изменений сервер.

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

# start the tunnel from the natted box you wish to pull from (local)
$ ssh -R 1234:localhost:22 user@remote

# on the other box (remote)
$ git remote add other-side ssh://user@localhost:1234/the/repo
$ git pull other-side

и если вы хотите, чтобы туннель работал в фоновом режиме

$ ssh -fNnR 1234:localhost:22 user@remote

Вы можете сделать:

$git config --bool core.bare true

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

Если вы практикуете GIT, создавая центральное и не голое РЕПО на ПК, он может не показывать сдвинутые файлы на некоторых ПК, но он был нажат. вы можете проверить это бегущий.

$git log в центральный РЕПО.

кроме того, если вы нажмете на GitHub, он покажет файлы там.

Comments

    Ничего не найдено.