Страницы

Поиск по вопросам

Показаны сообщения с ярлыком macos. Показать все сообщения
Показаны сообщения с ярлыком macos. Показать все сообщения

понедельник, 13 апреля 2020 г.

Проблема с MySQL в OS X 10.8: Access denied for user 'root'@'localhost'

#macos #mac #mysql

                    
Создаю рабочее окружении на OS X 10.8 Mountain Lion, сконфигурировал Apache2, подгрузил
PHP, скачал и установил все компоненты MySQL. Делаю все по инструкциям и в какой-то
момент появляется проблема, а именно возникает на стадии создания пароля для root.
Ввожу команду в терминале, как и говорят в инструкции (заменяя на свой пароль, в
одинарных ковычках).
/usr/local/mysql/bin/mysqladmin -u root password 'yourpasswordhere'


/usr/local/mysql/bin/mysqladmin:
connect to server at 'localhost'
failed error: 'Access denied for user
'root'@'localhost' (using password:
NO)'

И что же делать? Помогите, пожалуйста.
P.S. Уверен, что моя проблема уже всплывала, но она не гуглится в силу того, что
OS X не так популярна, как Windows. Да и все, что я нагуглил относится уже к более
поздним стадиям работы с MySQL.    


Ответы

Ответ 1



вводите /usr/local/mysql/bin/mysqladmin -u root -p И это все. Пароль спросит позже

суббота, 11 апреля 2020 г.

Core Data не сохраняется число

#macos #xcode #binding #coredata #objective_c

                    
Здравствуйте! Создал простенькую программку с поддержкой Core Data, типа Document–Based
app. Имеется текстовое поле, соединённое с arrayController'ом, который в свою очередь
соединён с Entity, у которой есть атрибут "name" типа "string" и атрибут "score" типа
"decimal". Введённая в текстовое поле строка сохраняется без проблем.
Также имеется другое текстовое поле: в него вводится число и после нажатия кнопки
"Go" значение из поля передаётся в метку. Метка соединена абсолютно точно так же как
и первое текстовое поле, но почему-то значение метки не сохраняется.
С чем это связано и как это исправить?
Для наглядности, проект можно скачать отсюда: https://www.dropbox.com/sh/kfp61xu3i4zj3kz/QCnPtlVqtE    


Ответы

Ответ 1



У вас проблема в том, что "запись" в базу не происходит. Изыскания показали, что данные из TextField записываются в базу только после переключения "фокуса" из этой TextField в другое место. А у вас получается, что фокусировки нет совсем. Попробуйте дополнить код "принудительно" записю данных в Базу. Например: - (IBAction)changeScore:(id)sender { [_scoreLabel setDoubleValue:[_scoreField doubleValue]]; id saveObj = [_arrayController selectedObjects][0]; double newDob = [_scoreField doubleValue]; NSNumber * decim = [NSNumber numberWithDouble:newDob]; [saveObj setValue:decim forKey:@"score"]; }

воскресенье, 15 марта 2020 г.

Альтернатива расширения для safari

#macos #chrome_extension #safari #firefox_extension


В хроме и в файерфоксе есть отличное приложения для перевода линк. Выделяем текст,
появляется иконка или горячими клавишами кликаем и получаем popup с переводом и возможностью
прослушать текст на двух языках. Но вот в сафари данного приложения не нашел и не нашел
достойной альтернативы. К примеру franker не обладает даже половиной функционала. Или
же дефолтный маковский словарь переводит только по слову. 

Есть ли что то достойное внимания?
    


Ответы

Ответ 1



Видимо вы плохо искали 1) igTranslator for Google: можно переводить целые предложения выделив текст + комбинация клавиш (по умолчанию T) или кликнув на иконку в тулбаре 2)TranslateMe: имеет массу настроек на любой вкус. При установке можете столкнутся с проблемой This developer's server appears to be busy. Please try again later. в этом случае качаем с гитхаба и устанавливаем вручную. Больше информации на оф страничке

Ответ 2



Вам возможно подойдет расширение Lingualeo.

вторник, 25 февраля 2020 г.

Как запустить .app с параметры для argv?

#macos #qt #cpp


Программу в Mac OS из командной строки запускаю следующим образом:
$ open myprogram.app

1) Но не могу понять как запустить с параметрами? Если попробовать:
$ open myprogram.app arg1 arg2

то терминал пишет:

The file /Documents/Meine Projekt/arg1
does not exist.

2) Внутри пытаюсь получить строку так:
int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    qDebug() << QString::fromUtf8(argv[0]);
    w.show();

    return a.exec();
}
    


Ответы

Ответ 1



Точно не уверен, но скорее всего придется долезть до бинарника внутри бандла (бандл хитрый вид папки) и дернуть непосредственно его. Где он конкретно лежит сейчас на вскидку не скажу, но он там по умолчанию всего один исполняемый вроде есть статический метод QCoreApplication::arguments (), возвращающий список аргументов в виде массива строк, только важно помнить что нулевой аргумент у него - имя программы

Ответ 2



open myprogram.app arg1 arg2?

В чём разница между CFDictionary и CFMutableDictionary?

#objective_c #xcode #macos #corefoundation


Здравствуйте, участники форума. Мой вопрос отражён в заголовке. Можно ли выполнить
какое-либо приведение типа, чтобы свести CFMutableDictionary к CFDictionary. Заранее
спасибо за помощь!)))    


Ответы

Ответ 1



Не совсем приведение, но может CFDictionaryCreateCopy подойдет : @function CFDictionaryCreateCopy Creates a new immutable dictionary with the key-value pairs from the given dictionary. Пример: CFMutableDictionaryRef dict = CFDictionaryCreateMutable(NULL, 0, &kCFTypeDictionaryKeyCallBacks, &kCFTypeDictionaryValueCallBacks); ... CFDictionaryRef copy = CFDictionaryCreateCopy(NULL, dict); CFRelease(dict);

Ответ 2



Разглядывание http://www.opensource.apple.com/source/CF/CF-476.14/CFDictionary.h показало, что все эти ...ref типы, по сути, void *. Может, попробовать через такие приведения типа (только позволит ли компилятор?). (Правда, стоит отметить, что mutable реально отличается по крайней мере флагами в дескрипторе хэш-таблицы, так что гарантировать работоспособность, не изучая тщательно код, не получится.)

воскресенье, 26 января 2020 г.

Последовательность запуска приложения, написанного на Cocoa

#cocoa #xcode #macos


Скачал исходный код торрент-клиента Transmission для изучения. Пытаюсь идти по цепочке,
и если я правильно все понял, то:

Как и у всех C-подобных программ,
    запуск начинается с функции main()
Далее, отсюда функция
        NSApplicationMain()  запускает
        обработчик (цикл) сообщений, которые
        будут поступать из файлов .xib
?
            - и здесь моя цепочка обрывается

В каком месте программа продолжается? Нет нигде ни AppDelegate, ни реализации протокола
NSApplicationDelegate. Не могу уцепиться - выйти из функции main() - куда мне последовательно
идти? Какой файл дальше просматривать? Файл .xib с окном, которое появляется первым
при запуске программы, я нашел. Но откуда программа его запускает?    


Ответы

Ответ 1



Отвечу на вопросы в обратном порядке. Программа запускает файл с окном из main bundle приложения. Это происходит в функции NSApplicationMain. В случае Transmission этот самый .xib - это MainMenu.xib. Затем стоит просмотреть файл Controller.h. У главного окна приложения через IBOutlet указан экземпляр класса Controller - значит, этот класс будет инстанцирован уже в функции NSApplicationMain. Перед посылкой классу любого другого сообщения будет послано сообщение +initialize, начинать читать можете с него. После этого будет послан обычный alloc-init, читаете, что происходит в init. После переходите к awakeFromNib, который вызывается после инициализации объекта, загруженного из nib-файла. Только после этого NSApplicationMain создаст главный NSRunLoop приложения, который, как вы сказали, будет принимать события от пользовательского интерфейса.

воскресенье, 12 января 2020 г.

Есть ли утилита для проверки совместимости Pc железа с Mac os?

#macos #mac #поиск_программ


Заинтересовался в установке os x на ноутбук. Не знаю нужно ли мне это, но хотелось
бы знать поддерживает ли ос ноут или не париться и  сидеть на линуксе .
    


Ответы

Ответ 1



Очень много проблем может быть связано с установкой OS X на ноутбук. Если стационарный компьютер можно собрать с практически идентичными характеристиками к Mac и с полпинка завести OS X, то с ноутбуками намного сложнее. Даже если практически все характеристики идентичные. Главная проблема - в конфигурациях с переключаемой графикой (Intel+nVidia или Intel+AMD) в OS X работает только Intel. Подходят только видеокарты Intel HD3xxx,4ххх,5ххх. Пример из жизни. Сотрудник ставил на свой ноутбук OS X, который схож с MacBook 15" по характеристикам - все прошло нормально, но как ни старался, клавиатура так и не заработала. А с внешней USB клавиатурой, ясное дело, это не то.

Ответ 2



Это называется "Хакинтош". Официально эпплом не поддерживается. Возможно нарушает лицензионное соглашение. Так что можно предложить только попробовать установить - заработает или нет.

понедельник, 6 января 2020 г.

какую модель памяти сегментную или страничную использует windows, linux, macos?

#linux #windows #macos #память


При прочтении Таненбаума возникли сложности с пониманием организации памяти в ОС.
Какая модель используется в современных ОС? Сегментная, страничная, сегментно-страничная?
В частности привело смущение сказанное про компиляторы, что для них использование сегментной
организации памяти гораздо удобнее, но компилятор же запускается в ОС. Это и запутало.
Как я понимаю как работать с  памятью реализовано в ОС, но разве программа может изменить
этот способ?
    


Ответы

Ответ 1



В современных ОС используется либо страничная, либо сегментно-страничная организация памяти. Сегментная не выгодна с точки зрения рациональности использования физической памяти (возможна фрагментация). За всю работу по переводу логического адреса в физический ответственна аппаратура ( MMU ), а за формирование правил и таблиц по которым будет осуществлен перевод - ОС. То есть, компилятор (и любая другая программа) не может перейти в другой режим адресования. С точки зрения прикладной программы, она (программа) находится в линейном адресном пространстве размером около 2Гб (для 32 битной windows), так как, 2 ГБ виртуального адресного пространства занимает код ОС, драйверов и DLL. Хочу заметить, что виртуальный адрес не имеет ничего общего с физическим. Очень утрированно процесс управления памятью показан на картинке ниже:

среда, 25 декабря 2019 г.

Обращение к git-dir через work-tree без симлинка

#git #macos #dropbox


Есть ~/work/project и ~/Dropbox/, в котором project → ~/work/project.

В самом ~/work/project папка .git вынесена в ~/work/project-git

Так вот, как без создания симлинка можно по прежнему вызывать git в ~/work/project?

Симлинк использовать нельзя так как дропбокс скопирует все содержимое. Может, ему
можно как-то сказать не делать этого?
    


Ответы

Ответ 1



адресоваться к каталогу с хранилищем (если он находится не в каталоге .git в корне проекта) можно разными способами. в вашем случае подойдёт адресация с помощью файла .git, описанная, например, в этом ответе. покажу на примере: рабочую копию (workdir) вы хотите держать в каталоге /путь/к/проекту а само хранилище (gitdir) хотите держать в каталоге /путь/к/хранилищу сделайте текущим каталог /путь/к/проекту: $ cd /путь/к/проекту инициализируйте хранилище: для программы git версии 1.7.5 или выше: $ git --separate-git-dir /путь/к/хранилищу init в каталоге /путь/к/хранилищу будет создано полноценное хранилище со всеми необходимыми файлами/каталогами: branches, config, description и т.д., а в текущем каталоге будет создан файл .git с «отсылкой» к месторасположению хранилища, такого содержания: gitdir: /путь/к/хранилищу для программы git версии ниже 1.7.5 надо будет проделать описанное в полу-ручном режиме: $ git --git-dir=/путь/к/хранилищу --work-tree=. init $ echo "gitdir: /путь/к/хранилищу" > .git для случая, если хранилище уже существует в каталоге .git в корне вашего проекта, потребуются такие действия: сделайте текущим каталог /путь/к/проекту $ cd /путь/к/проекту установите явно в конфигурации хранилища путь к рабочему каталогу: $ git config core.worktree /путь/к/проекту переместите каталог .git в нужное место с нужным именем (целевой каталог /путь/к/хранилищу не должен существовать в этот момент, иначе файлы/каталоги хранилища попадут в /путь/к/хранилищу/.git): $ mv .git /путь/к/хранилищу создайте файл .git в текущем каталоге: $ echo "gitdir: /путь/к/хранилищу" > .git

вторник, 24 декабря 2019 г.

Возможно ли создание ОС, запускающую исполняемые файлы от Win, Mac, Linux

#windows #ос #macos #linux


Возник спор, решил спросить у аудитории (:
В общем, чисто теоретически возможно ли создание ОС, у которой исполняемыми файлами
будут являться .exe .deb и т.п. и они будут корректно интерпретированы и подобающе
работоспособными?
Получается что-то наподобие "Кроссплатформенной ОС", оксюморон прям (:    


Ответы

Ответ 1



Существует же wine и разные его дериваты, которые худо-бедно позволяют на никсах запускать виндовские приложения. Что-то подобное есть и для маков. И на виндах есть способы запускать линуксовые приложения. Так что не только теоретически, но и практически уже нечто подобное существует, хотя и очень далекое от совершенства. ADDENDA: deb - это не исполняемый файл, а установочный пакет Linux Debian и его производных (например, Ubuntu).

Ответ 2



Конечно возможно. Но на пути будет множество сложностей и придётся проделать очень много лишней работы. Это было бы очень неэффективно с точки зрения ресурсов разработчиков. Создание действительно полноценной ОС требует довольно больших ресурсов и много времени, тестирования и т.п. Сделать две ОС в одной потребует ещё больше усилий и терпения. Но теоретически всё это возможно. Ничто не мешает реализовать разные системные API одновременно, поддерживать несколько моделей организации файлов, разных абстракций, реализовать иксы и т.п. На уровне ядра придётся также реализовать сразу два вида API чтобы драйвера в ядре могли работать и не мешать друг другу. С другой стороны есть вероятность, что всё же будут ограничения на уровне ядра, связанные с разной архитектурой. Однако на прикладном уровне думаю это возможно, более чем. Такие вещи как wine доказывают, что это возможно. Только очень уж мучительно будет.

Ответ 3



Наверное, да. Т.е. подсистемы типа wine, cygwin, interix существуют, подкрутить загрузчик (+ подключение соответствующих разделяемых библиотек) тоже можно, хотя, на практике геморроя будет много. Интереснее другое продолжение темы. Кроссплатформенный standalown модуль (естественно я имею в виду машинные коды и следовательно речь идет об одной и той же процессорной архитектуре). Возможно к такой штуке нужен будет миниустановщик (меняющий magic и если потребуется формат файла для загрузчика ОС) в зависимости от ОС. Идея состоит в том, что функция в точке входа определяет (сама, на лету) текущее окружение и "подстраивается" к нему. Очевидно, что система разработки (компоновщик и библиотеки) должна "обладать знаниями" о возможных целевых ОС. IMHO идея интересная, но дальше теоретических размышлений сам не двигался. На практике же широко используются интерпретаторы типа python, perl ...

воскресенье, 15 декабря 2019 г.

Как правильно установить Git на OS X

#git #macos


С установкой Git на OS X есть проблема: он уже установлен в системе и просто так
его не обновить. При каждом обновлении ОС устанавливает его заново.

Например, на момент написания этого вопроса, актуальной версией Git является 2.5.1.
А в OS X Yosemite зашит 2.3.2.

При установке новой версии через Homebrew она все равно остается недоступной.
    


Ответы

Ответ 1



Установка «с нуля» Устанавливаем Git, например через Homebrew $ brew install git Проверяем текущую версию Git $ git --version git version 2.4.9 (Apple Git-60) Если вы видите "Apple Git", значит используется старая версия. Проверим, где установлена используемая версия Git. $ which git /usr/bin/git Точно, эта версия ставится вместе с системой. А та, которая нам нужна, и которая установлена homebrew, находится в /usr/local/bin/git. Почему выбирается не она? Вероятнее всего потому, что путь к ней находится дальше в переменной окружения $PATH. echo $PATH Меняем $PATH В переменной $PATH хранятся пути к папкам, разделённые двоеточиями. Когда вы хотите запустить какую-то программу по имени (а не по полному пути), поиск происходит во всех этих папках по очереди, слева направо. Переменная задаётся в файле ~/.bashrc (или ~/.zshrc и т.п., в зависимости от используемой оболочки). Откройте его и найдите примерно такую строку: export PATH="/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin" Поставьте /usr/local/bin раньше, чем /usr/bin: export PATH="/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin" Перезапустите оболочку: bash $ git --version git version 2.10.1 $ which git /usr/local/bin/git Ура, работает!

среда, 17 июля 2019 г.

IO-функции в kernel-space

Env.: macOS, пишу драйвер, компилятор - clang

Пытаюсь использовать ф-ию write, подключаю хэдер unistd.h - компилятор выдает ошибку - файл не найден. Указываю в настройках проекта дополнительный путь, где искать хэдеры - /usr/include - компилятор выдает бесчисленное количество ошибок самого разного содержания. С чем это связано? Я не могу в kernel-space использовать write? Или я должен использовать какие-то другие ф-ии?


Ответ

Я не уверен, что это единственный доступный способ, но он рабочий:
vnode_t vnode = NULLVP; vfs_context_t ctxt = vfs_context_create(0); errno_t errno;
errno = vnode_open(file_name_buf, (O_TRUNC | O_CREAT | O_RDWR), S_IRUSR | S_IWUSR, VNODE_LOOKUP_NOFOLLOW, &vnode, ctxt); if (!errno) { vn_rdwr(UIO_WRITE , vnode , buffer , buf_inf.bytesused , 0 , UIO_SYSSPACE , IO_NOCACHE | IO_NODELOCKED | IO_UNIT , vfs_context_ucred(ctxt) , (int*)0 , vfs_context_proc(ctxt));
vnode_close(vnode, FWASWRITTEN, ctxt); }
Вместо vfs_context_create(0) можно использовать vfs_context_current()

понедельник, 15 июля 2019 г.

Есть ли утилита для проверки совместимости Pc железа с Mac os?

Заинтересовался в установке os x на ноутбук. Не знаю нужно ли мне это, но хотелось бы знать поддерживает ли ос ноут или не париться и сидеть на линуксе .


Ответ

Очень много проблем может быть связано с установкой OS X на ноутбук. Если стационарный компьютер можно собрать с практически идентичными характеристиками к Mac и с полпинка завести OS X, то с ноутбуками намного сложнее. Даже если практически все характеристики идентичные. Главная проблема - в конфигурациях с переключаемой графикой (Intel+nVidia или Intel+AMD) в OS X работает только Intel. Подходят только видеокарты Intel HD3xxx,4ххх,5ххх.
Пример из жизни. Сотрудник ставил на свой ноутбук OS X, который схож с MacBook 15" по характеристикам - все прошло нормально, но как ни старался, клавиатура так и не заработала. А с внешней USB клавиатурой, ясное дело, это не то.

суббота, 6 июля 2019 г.

Проблема с MySQL в OS X 10.8: Access denied for user 'root'@'localhost'

Создаю рабочее окружении на OS X 10.8 Mountain Lion, сконфигурировал Apache2, подгрузил PHP, скачал и установил все компоненты MySQL. Делаю все по инструкциям и в какой-то момент появляется проблема, а именно возникает на стадии создания пароля для root. Ввожу команду в терминале, как и говорят в инструкции (заменяя на свой пароль, в одинарных ковычках). /usr/local/mysql/bin/mysqladmin -u root password 'yourpasswordhere' /usr/local/mysql/bin/mysqladmin: connect to server at 'localhost' failed error: 'Access denied for user 'root'@'localhost' (using password: NO)' И что же делать? Помогите, пожалуйста. P.S. Уверен, что моя проблема уже всплывала, но она не гуглится в силу того, что OS X не так популярна, как Windows. Да и все, что я нагуглил относится уже к более поздним стадиям работы с MySQL.


Ответ

вводите /usr/local/mysql/bin/mysqladmin -u root -p И это все. Пароль спросит позже

пятница, 5 июля 2019 г.

Core Data не сохраняется число

Здравствуйте! Создал простенькую программку с поддержкой Core Data, типа Document–Based app. Имеется текстовое поле, соединённое с arrayController'ом, который в свою очередь соединён с Entity, у которой есть атрибут "name" типа "string" и атрибут "score" типа "decimal". Введённая в текстовое поле строка сохраняется без проблем. Также имеется другое текстовое поле: в него вводится число и после нажатия кнопки "Go" значение из поля передаётся в метку. Метка соединена абсолютно точно так же как и первое текстовое поле, но почему-то значение метки не сохраняется. С чем это связано и как это исправить? Для наглядности, проект можно скачать отсюда: https://www.dropbox.com/sh/kfp61xu3i4zj3kz/QCnPtlVqtE


Ответ

У вас проблема в том, что "запись" в базу не происходит. Изыскания показали, что данные из TextField записываются в базу только после переключения "фокуса" из этой TextField в другое место. А у вас получается, что фокусировки нет совсем. Попробуйте дополнить код "принудительно" записю данных в Базу. Например: - (IBAction)changeScore:(id)sender { [_scoreLabel setDoubleValue:[_scoreField doubleValue]]; id saveObj = [_arrayController selectedObjects][0]; double newDob = [_scoreField doubleValue]; NSNumber * decim = [NSNumber numberWithDouble:newDob]; [saveObj setValue:decim forKey:@"score"]; }

среда, 12 июня 2019 г.

Почему перевод строки это CR+LF а не LF+CR?

Ведь по идее сначала происходит подача новой строки, а уже потом возврат каретки https://youtu.be/oxN1C2QQUIE
PS Пользователям macOS и linux: у вас реально только один символ LF?


Ответ

Википедия объясняет это так: при печати на телетайпе возврат каретки длился больше, чем печатается один символ. Поэтому если сначала перевести строку, а потом вернуть каретку и печатать дальше, то первый символ печатался где-нибудь в середине строки.
Порядок CR, LF был выбран, чтобы дать каретке небольшую фору. Даже её могло быть недостаточно, и тогда после отправлялась некоторая пустая последовательность.
только один символ LF
Начал использоваться в ОС Multics, где перевод каретки принтера (и, по всей видимости, ожидание до конца перевода) осуществлялся его драйвером. CR без новой строки можно было использовать для разных декоративных эффектов. Из Multics LF перешел в Unix, а оттуда в остальные ОС.

вторник, 14 мая 2019 г.

В чём разница между CFDictionary и CFMutableDictionary?

Здравствуйте, участники форума. Мой вопрос отражён в заголовке. Можно ли выполнить какое-либо приведение типа, чтобы свести CFMutableDictionary к CFDictionary. Заранее спасибо за помощь!)))


Ответ

Не совсем приведение, но может CFDictionaryCreateCopy подойдет : @function CFDictionaryCreateCopy Creates a new immutable dictionary with the key-value pairs from the given dictionary. Пример: CFMutableDictionaryRef dict = CFDictionaryCreateMutable(NULL, 0, &kCFTypeDictionaryKeyCallBacks, &kCFTypeDictionaryValueCallBacks); ... CFDictionaryRef copy = CFDictionaryCreateCopy(NULL, dict); CFRelease(dict);

вторник, 12 февраля 2019 г.

какую модель памяти сегментную или страничную использует windows, linux, macos?

При прочтении Таненбаума возникли сложности с пониманием организации памяти в ОС. Какая модель используется в современных ОС? Сегментная, страничная, сегментно-страничная? В частности привело смущение сказанное про компиляторы, что для них использование сегментной организации памяти гораздо удобнее, но компилятор же запускается в ОС. Это и запутало. Как я понимаю как работать с памятью реализовано в ОС, но разве программа может изменить этот способ?


Ответ

В современных ОС используется либо страничная, либо сегментно-страничная организация памяти. Сегментная не выгодна с точки зрения рациональности использования физической памяти (возможна фрагментация).
За всю работу по переводу логического адреса в физический ответственна аппаратура ( MMU ), а за формирование правил и таблиц по которым будет осуществлен перевод - ОС.
То есть, компилятор (и любая другая программа) не может перейти в другой режим адресования.
С точки зрения прикладной программы, она (программа) находится в линейном адресном пространстве размером около 2Гб (для 32 битной windows), так как, 2 ГБ виртуального адресного пространства занимает код ОС, драйверов и DLL.
Хочу заметить, что виртуальный адрес не имеет ничего общего с физическим
Очень утрированно процесс управления памятью показан на картинке ниже:

четверг, 29 ноября 2018 г.

Обращение к git-dir через work-tree без симлинка

Есть ~/work/project и ~/Dropbox/, в котором project → ~/work/project
В самом ~/work/project папка .git вынесена в ~/work/project-git
Так вот, как без создания симлинка можно по прежнему вызывать git в ~/work/project?
Симлинк использовать нельзя так как дропбокс скопирует все содержимое. Может, ему можно как-то сказать не делать этого?


Ответ

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

покажу на примере:
рабочую копию (workdir) вы хотите держать в каталоге /путь/к/проекту а само хранилище (gitdir) хотите держать в каталоге /путь/к/хранилищу

сделайте текущим каталог /путь/к/проекту
$ cd /путь/к/проекту инициализируйте хранилище:
для программы git версии 1.7.5 или выше
$ git --separate-git-dir /путь/к/хранилищу init
в каталоге /путь/к/хранилищу будет создано полноценное хранилище со всеми необходимыми файлами/каталогами: branches, config, description и т.д., а в текущем каталоге будет создан файл .git с «отсылкой» к месторасположению хранилища, такого содержания:
gitdir: /путь/к/хранилищу для программы git версии ниже 1.7.5 надо будет проделать описанное в полу-ручном режиме:
$ git --git-dir=/путь/к/хранилищу --work-tree=. init $ echo "gitdir: /путь/к/хранилищу" > .git

для случая, если хранилище уже существует в каталоге .git в корне вашего проекта, потребуются такие действия:
сделайте текущим каталог /путь/к/проекту
$ cd /путь/к/проекту установите явно в конфигурации хранилища путь к рабочему каталогу:
$ git config core.worktree /путь/к/проекту переместите каталог .git в нужное место с нужным именем (целевой каталог /путь/к/хранилищу не должен существовать в этот момент, иначе файлы/каталоги хранилища попадут в /путь/к/хранилищу/.git):
$ mv .git /путь/к/хранилищу создайте файл .git в текущем каталоге:
$ echo "gitdir: /путь/к/хранилищу" > .git

пятница, 16 ноября 2018 г.

Как правильно установить Git на OS X

С установкой Git на OS X есть проблема: он уже установлен в системе и просто так его не обновить. При каждом обновлении ОС устанавливает его заново.
Например, на момент написания этого вопроса, актуальной версией Git является 2.5.1. А в OS X Yosemite зашит 2.3.2.
При установке новой версии через Homebrew она все равно остается недоступной.


Ответ

Установка «с нуля»
Устанавливаем Git, например через Homebrew
$ brew install git Проверяем текущую версию Git
$ git --version git version 2.4.9 (Apple Git-60)
Если вы видите "Apple Git", значит используется старая версия. Проверим, где установлена используемая версия Git.
$ which git /usr/bin/git
Точно, эта версия ставится вместе с системой. А та, которая нам нужна, и которая установлена homebrew, находится в /usr/local/bin/git. Почему выбирается не она? Вероятнее всего потому, что путь к ней находится дальше в переменной окружения $PATH
echo $PATH Меняем $PATH
В переменной $PATH хранятся пути к папкам, разделённые двоеточиями. Когда вы хотите запустить какую-то программу по имени (а не по полному пути), поиск происходит во всех этих папках по очереди, слева направо. Переменная задаётся в файле ~/.bashrc (или ~/.zshrc и т.п., в зависимости от используемой оболочки). Откройте его и найдите примерно такую строку:
export PATH="/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin"
Поставьте /usr/local/bin раньше, чем /usr/bin
export PATH="/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin"
Перезапустите оболочку:
bash $ git --version git version 2.10.1
$ which git /usr/local/bin/git
Ура, работает!