Настройка пользовательской установки Git

#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. Я сделал это, и я бы сказал, что, хотя само по себе оно работает очень хорошо, быстро становится очевидным, что это решение просто не очень полезно в долгосрочной перспективе.