#git
#git
Вопрос:
Я хочу установить Git в пользовательском расположении, отличном от usr/local/git/bin/git
каталога по умолчанию, который установщик пакета из http://git-scm.com / веб-сайт устанавливается на.
Например, я только что попытался скопировать содержимое usr/local/git
to /Users/braitsch/my-git
и обновить переменную path /Users/braitsch/my-git/bin
в, и теперь Git недоволен, говоря, что он не может найти некоторые из своих команд, такие как git -stash
.
Я также только что попробовал настроить ./git exec-path=/Users/braitsch/my-git/libexec/git-core
, но, похоже, это не работает.
Итак, мой вопрос в том, как я могу настроить пользовательскую установку Git без использования менеджеров пакетов или готовых установщиков? Я хотел бы найти сценарий, который я мог бы легко использовать как на Mac, так и на Windows.
Обновить
Похоже, что Git stash (и, возможно, другие команды) завершится с ошибкой, если вы переместите каталог, в который устанавливается usr/local/git
установщик пакета, в другое место. Как я могу обойти это? Я пытаюсь запустить Git из пользовательского местоположения, но, похоже, это невозможно с помощью сборок на http://git-scm.com сайт?
Комментарии:
1. Вы обновили свой путь
/Users/braitsch/my-git/bin
, верно? Нет/Users/braitsch/my-git/bin/git
?2. Я сделал, извините, это была опечатка. Только что внес исправление. Похоже, что все работает с этой настройкой, кроме git stash.. Вы случайно не знаете, все ли необходимое Git содержится в том
usr/local/git
каталоге, который создает установщик пакета, или Git обращается к другим зависимостям файловой системы? Еще раз спасибо.3. Для какой именно команды вы вводите
git stash
? (и какое точное сообщение об ошибке?) (потому что вы написалиgit -stash
с ‘-‘)4. Если я подключаюсь к git-репозиторию и запускаю,
git stash list
я получаю,git: 'stash' is not a git command. See 'git --help'.
что странно, так это то, что stash отлично работает, когда я запускаю его с экземпляром git, установленным через пакет на сайте git-scm, но если я перемещаю каталог в usr /local / git в любом месте за пределами usr /local, командасбой. Похоже, что все остальные команды, которые я тестировал, работают нормально.stash
Полагается ли на зависимости вне основного пакета git? Еще раз спасибо.5. Для записи я тоже пытался
git --git-dir=./git --work-tree=. stash list
, но безрезультатно.
Ответ №1:
Для меня (в том числе git stash
) отлично работает клонирование репозитория git, например, с:
cd
git clone git://github.com/gitster/git.git
cd git
make
(Ранее я установил зависимости сборки с sudo apt-get build-dep git
помощью , которая будет работать в последнем дистрибутиве на основе Debian — в противном случае, если вы получите ошибку сборки, вам просто нужно будет установить зависимости сборки git с помощью любого механизма, который вы обычно используете.)
Затем вы можете вызвать этот git с:
$ export GIT_EXEC_PATH=~/git/
$ ~/git/git --version
git version 1.7.7.rc0.72.g4b5ea
… или использование ~/git/git --exec-path=/home/mark/git
вместо переменной среды.
Вы можете переместить встроенное дерево исходных текстов в любое место, и оно все равно работает, например:
$ mv ~/git ~/tmp/
$ export GIT_EXEC_PATH=~/tmp/git/
$ ~/tmp/git/git --version
git version 1.7.7.rc0.72.g4b5ea
Комментарии:
1. Привет, Марк, спасибо за ваш ответ, но, к сожалению, у меня это не работает. Попытки установить
--exec-path
что-либо выдает ошибку, напримерgit --exec-path=/Users/braitsch/test-dir/git
, и установка переменной ENV через export GIT_EXEC_PATH, по-видимому, игнорируется. Кажется, я могу заставить stash и now clone (через https) работать только тогда и только тогда, когда я оставляю Git в том же месте, где я его скомпилировал. Я что-то упустил из ваших инструкций выше? Еще раз спасибо за вашу помощь.2. Просто чтобы расширить это, после перемещения каталога скомпилированных запросов кода в
git clone
иgit fetch
сбоя по протоколу https сfatal: Unable to find remote helper for 'https'
помощью, я полагаю, потому что перемещение каталога прерывает путь к libcurl.3. Спасибо, Марк, я наконец-то заработал после нескольких попыток. Я все еще не могу установить GIT_EXEC_PATH, однако скомпилированный код, похоже, переносится между компьютерами и вокруг моей файловой системы, что мне и нужно. Еще раз спасибо.
4. Настройка
export GIT_EXEC_PATH=/my/path/usr/libexec/git-core
(и включение ее в активный профиль) сработала для меня. Я собирался отказаться от идеи, что я мог бы установить git без установщика пакетов, но это решило последнее препятствие. Это полезно и для npm, поскольку в нем используется git.
Ответ №2:
Я бы просто перестроил его из исходного кода. Возьмите архив из http://git-scm.com / затем создайте его с помощью ./configure --prefix=/path/to/my-git/
.
Редактировать: я не совсем уверен, как создать перемещаемую установку git, но если вы начнете с создания ее с определенным уникальным префиксом, установите его, а затем просмотрите установленные файлы для префикса (т. Е. grep -R my-git /path/to/my-git/
), Это, Вероятно, будет хорошей отправной точкой.
Комментарии:
1. Я голосую за это. Если вы обходите свой менеджер пакетов, лучше всего полностью обойти его и сделать все самостоятельно.
2. Спасибо, ребята. Что я действительно пытаюсь сделать, так это найти или создать автономный двоичный файл или пакет, который я также могу перенести на другие компьютеры. Я нахожусь в процессе создания клиента Git и пытаюсь избежать сценария, заставляющего пользователей вручную устанавливать Git или другие зависимости, чтобы запустить Git на своем компьютере. Если я скомпилирую из исходного кода, не будет ли это привязывать экземпляр, который я создаю, к моей конкретной машине?
Ответ №3:
Используйте виртуальную машину (virtualbox бесплатен), а также создавайте и используйте на компьютере с Linux. Создав свою собственную, вы можете довольно легко переключать версии.
Надеюсь, это поможет.
Комментарии:
1. Виртуальная машина только для пользовательского расположения установки git?
2. Я сделал это, и я бы сказал, что, хотя само по себе оно работает очень хорошо, быстро становится очевидным, что это решение просто не очень полезно в долгосрочной перспективе.