Ru-Board.club
← Вернуться в раздел «Прикладное программирование»

» Расскажите за git [windows]

Автор: NightSpawn
Дата сообщения: 07.05.2014 03:04
Поможите настроить git под Windows. Есть некий проект, который мне перешел по наследству, пред. программист использовал git, но насколько я смог разобраться, исключительно локально, т.е. в папке с проектом все и хранилось и ни с чем удаленным не синхронизовалось. Я хочу добавить к этой существующей схеме удаленный "сервер" (некий комп с windows, в моей локальной сети, исполняющий функции мегасервера). Что я сделал: сделал копию папки с проектом на сервере, общим доступом открыл доступ к этой папке, клонировал проект с сервера к себе на комп. Вроде как бы все =) можно видеть коммиты и вроде счастье, но при попытке синхронизации (push) с сервером, git ругается:


Цитата:
git.exe push -v --progress "origin" master:master

Pushing to //10.0.0.31/Repo/prj
Counting objects: 1194, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (1126/1126), done.
Writing objects: 100% (1129/1129), 46.92 MiB | 1.47 MiB/s, done.
Total 1129 (delta 725), reused 0 (delta 0)
remote: error: refusing to update checked out branch: refs/heads/master
remote: error: By default, updating the current branch in a non-bare repository
remote: error: is denied, because it will make the index and work tree inconsistent
remote: error: with what you pushed, and will require 'git reset --hard' to match
remote: error: the work tree to HEAD.
remote: error:
remote: error: You can set 'receive.denyCurrentBranch' configuration variable to
remote: error: 'ignore' or 'warn' in the remote repository to allow pushing into
remote: error: its current branch; however, this is not recommended unless you
remote: error: arranged to update its work tree to match what you pushed in some
remote: error: other way.
remote: error:
remote: error: To squelch this message and still keep the default behaviour, set
remote: error: 'receive.denyCurrentBranch' configuration variable to 'refuse'.
To //10.0.0.31/Repo/prj
! [remote rejected] master -> master (branch is currently checked out)
error: failed to push some refs to '//10.0.0.31/Repo/prj'


git did not exit cleanly (exit code 1) (83445 ms @ 07.05.2014 11:01:39)


Подскажите что ему не нравится?
Автор: miwa
Дата сообщения: 07.05.2014 09:31
NightSpawn
Для работы git расшаривать папки не нужно. Вообще. Вместо этого на «суперсервере» необходимо для начала установить msysgit. Ну а дальше - как описано в документации в том числе на русском.
Автор: NightSpawn
Дата сообщения: 08.05.2014 00:48
miwa
С учетом того, что сервер будет исполнять роль всего навсего удаленного хранилища персонально для меня, так ли необходима установка msysgit? Я попробовал сделать push в новую ветку, не master, все прошло успешно. Значит моя схема не настолько утопична.
Автор: miwa
Дата сообщения: 08.05.2014 08:29
NightSpawn
Если точно не нужен msysgit - тогда зачем git? Копируй себе ручками файлы на удаленную шару и не парься.
Автор: MARKSIST_UA
Дата сообщения: 14.09.2015 15:29
[more] Вот тут у меня тоже есть вопросик не большой.

Есть задача ввести в эксплуатацию систему контроля версий (GIT)
Сервер для GIT - Windows Server Standart x64 2008 R2
Клиент - Windows 7 x64

На сервере установлено:
-Git-2.5.1-32-bit
-Cygwin(openSSH сервер)

На клиенте установлено:
-Git-2.5.1-32-bit
-TortoiseGit-1.8.15.0-64bit

Последовательность установки>>
Сервер:
1. Установка Cygwin
2. Установка openSSH сервера через Cygwin
3. Настройка openSSH сервера на дефолтных настройках (Подключение только по паролю пользователь git)
4. Установка Git-2.5.1-32-bit
5. Добавлено в переменные среды на сервере
"C:\Program Files (x86)\Git\cmd;C:\Program Files (x86)\Git\bin;C:\Program Files (x86)\Git\mingw32\libexec\git-core;C:\Program Files (x86)\Git\mingw32\bin"
6. Создание репозитория с помощью GitGUI по пути C:\repo (вот что получилось C:\repo\.git)
7. Установка прав на чтение и запись (вообщем на все и для всех) на папку C:\repo

Клиент:
1. Установка Git-2.5.1-32-bit
2. установка TortoiseGit-1.8.15.0-64bit

Результат:
1. Клиент подключается к серверу по SSH (Putty) по логину git и паролю - удачно (значит SSH сервер работает)
2. По пути C:\ ПКМ в контекстном меню выбираю Git clone...
3. В открывшемся окне URL: ssh://git@сервер:/C:/repo
4. Вводим пароль для пользователя git
5. Ошибка:

git.exe clone --progress -v "ssh://git@сервер:/C:/repo" "C:\repo"

Cloning into 'C:\repo'...
fatal: '/C:/repo' does not appear to be a git repository
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.


git did not exit cleanly (exit code 128) (8237 ms @ 14.09.2015 14:42:28)

Подскажите пожалуйста возможные варианты решения проблемы, или подскажите в чем я не прав. Спасибо заранее. [/more]
Автор: NeoAnomaly
Дата сообщения: 15.09.2015 09:58
MARKSIST_UA, пробовал играть с путями на сервере? По-моему слэш лишний:

Цитата:
git.exe clone --progress -v "ssh://git@сервер:/C:/repo" "C:\repo"
, т.е. попробуй его убрать:

Цитата:
git.exe clone --progress -v "ssh://git@сервер:C:/repo" "C:\repo"
Автор: MARKSIST_UA
Дата сообщения: 15.09.2015 11:08
[more] Немного изменились действия. Со слэшем все нормально.

Есть задача ввести в эксплуатацию систему контроля версий (GIT)

Сервер для GIT - Windows Server Standart x64 2008 R2

Клиент - Windows 7 x64

На сервере установлено:

-Git-2.5.1-32-bit

-Cygwin(openSSH сервер)

На клиенте установлено:

-Git-2.5.1-32-bit

-TortoiseGit-1.8.15.0-64bit

Последовательность установки>>

Сервер:

Установка Cygwin
Установка openSSH сервера через Cygwin
Настройка openSSH сервера на дефолтных настройках (Подключение только по паролю пользователь git)
Установка Git-2.5.1-32-bit
Добавлено в переменные среды на сервере
"C:\Program Files (x86)\Git\cmd;C:\Program Files (x86)\Git\bin;C:\Program Files (x86)\Git\mingw32\libexec\git-core;C:\Program Files (x86)\Git\mingw32\bin"
Создание папки C:\gitrepo
Установка прав на чтение и запись (вообщем на все и для всех) на папку C:\gitrepo
В gitBASH переходим в C:\gitrepo

$ cd C:\gitrepo

Создал репозиторий

$ git init --bare

Клиент:

Установка Git-2.5.1-32-bit
установка TortoiseGit-1.8.15.0-64bit
git config --global user.name и git config --global user.email выполнено
Результат:

Клиент подключается к серверу по SSH (Putty) по логину git и паролю - удачно (значит SSH сервер работает)
По пути C:\ ПКМ в контекстном меню выбираю Git clone...
В открывшемся окне URL: ssh://git@сервер:/cygdrive/c/gitrepo
Вводим пароль для пользователя git
Ошибка:
git.exe clone --progress -v "ssh://git@сервер:/cygdrive/c/gitrepo" "C:\gitrepo"

Cloning into 'C:\gitrepo'... fatal: '/cygdrive/c/gitrepo' does not appear to be a git repository fatal: Could not read from remote repository.

Please make sure you have the correct access rights and the repository exists.

git did not exit cleanly (exit code 128) (136079 ms @ 15.09.2015 10:39:34)
в gitBASH команда git clone ssh://git@сервер:/cygdrive/c/gitrepo
fatal: '/cygdrive/c/gitrepo' does not appear to be a git repository fatal: Could not read from remote repository.

Please make sure you have the correct access rights and the repository exists.
Возможно я задаю не правильный путь клонирования? Подскажите пожалуйста возможные варианты решения проблемы, или подскажите в чем я не прав. Спасибо заранее. [/more]
Автор: zzz528
Дата сообщения: 15.09.2015 17:46
Какая же это замысловатая програма.

Ну сделал git clone тру..ля.ля , скачало непонятные файлы, запакованы скорее всего, а дальше что, как с этим работать. Я и смотрел файлы док - ответа не нашел.
Автор: andre_d
Дата сообщения: 19.10.2015 18:13
Начинаю осваивать Git. Пока работаю один
Создал локальный репозиторий, создаю коммиты, в логе видна все история, все ОК.
Но есть непонятка с движением туда-сюда.
Понадобилось откатится на два коммита назад.
делаю reset - нужный коммит в индексе
делаю chekout - нужный коммит в рабочем каталоге
... вроде все OK но !!!
Как вернуться к последнему созданному коммиту? В логе его нет ?

Работаю под Windows. Наиболее удобным кажется использование SmartGit. перечитал
много всяких doc, но ответа про столь банальное действие не нашел.
Автор: NeoAnomaly
Дата сообщения: 21.10.2015 07:50
andre_d, понадобилось откатиться или только лишь переключиться на др. коммит?
reset выполняет именно откат изменений, поэтому в логе и нет последних коммитов. Чтобы просто вернуться к какому-то раннему коммиту необходимо просто делать checkout.
Автор: andre_d
Дата сообщения: 21.10.2015 15:07

Цитата:
andre_d, понадобилось откатиться или только лишь переключиться на др. коммит?
reset выполняет именно откат изменений, поэтому в логе и нет последних коммитов. Чтобы просто вернуться к какому-то раннему коммиту необходимо просто делать checkout.

Спасибо, надо было просто переключиться на время. Вроде по Checkout получается то, что хотелось - перемещаться вперед назад. - В рабочем каталоге появляются нужные состояния.

Не очень понятно, что происходит с индексом. Я думал все пересылки должны через него происходить. И не удается встроенным просмотрщиком различия смотреть.
Автор: ItsJustMe
Дата сообщения: 21.10.2015 18:27

Цитата:
Расскажите за git

Боюсь, рассказать что-либо за git мы не сможем. Git даже сам по себе не является хорошим рассказчиком, ибо вообще никогда ничего не рассказывал. Поэтому, заменить его в качестве рассказчика тоже вряд ли возможно.
Автор: NeoAnomaly
Дата сообщения: 22.10.2015 07:34

Цитата:
Не очень понятно, что происходит   с индексом.  Я думал все пересылки должны через него происходить.

andre_d, а что происходит с индексом и о каких пересылках идёт речь?


Цитата:
И не удается встроенным просмотрщиком различия смотреть.

Речь про smartgit? Не показывает изменения или что? Сам я пользуюсь связкой tortoise git + araxis merge ни разу не испытывал неудобств, в отличии от новомодных SourceTree, GitHub Desktop и им подобных... Видимо привычка ещё с tortoise svn
Автор: andre_d
Дата сообщения: 23.10.2015 13:55

Цитата:

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

andre_d, а что происходит с индексом и о каких пересылках идёт речь?

Насколько я понял принцип работы GIT, из рабочего каталога информация сначала переносится в индекс (add), а потом собственно в репозитарий(локальный) (commit). И, соответственно, при необходимости вернуться к какому-то состоянию, его нужно переслать сначала в индекс, а потом в рабочий каталог. А сейчас получается что по Checkout в SmartGit-e у меня сразу нужное состояние оказывается в рабочем каталоге. А индекс вроде и ни при чем.

Цитата:

И не удается встроенным просмотрщиком различия смотреть.

Речь про smartgit? Не показывает изменения или что? Сам я пользуюсь связкой tortoise git + araxis merge ни разу не испытывал неудобств, в отличии от новомодных SourceTree, GitHub Desktop и им подобных... Видимо привычка ещё с tortoise svn

Да про SmartGit. Когда у меня в рабочем каталоге было текущее состояние, его встроенный просмотрщик различий достаточно удобно показывал что когда было изменено. А когда в рабочем каталоге восстановленное, изменения не показываются(хотя может и действительно непонятно что с чем должно сравниваться)
TortoiseGit что то у меня не прижился. Он похоже завязан на контекстное меню и наверное как-то кривенько встал. Но попробую еще раз. Спасибо!
Автор: KDPoid
Дата сообщения: 23.01.2016 05:18
Расскажите за Git...

Привык к SVN и TFVC.
Перехожу на проект, где команда использует Git.
- А как вы блокируете файл от перезаписи другими участниками, пока сами над ним работаете ?
- При помощи Skype...
-

Я понимаю, что идея заблокировать файл не очень ложится на концепцию распределённого хранилища. Но потребность совместной работы над бинарными файлами ведь никуда не девается. Вне зависимости от красивых теорий
Кому Git привычен, поделитесь, как вы из этого выкручиваетесь.
А то гугл больше переживает о блокировке GitHub, или выдаёт какие-то способы лечения ангины автогеном через зад...
Автор: Alexzzy
Дата сообщения: 23.01.2016 12:32
KDPoid

Цитата:
Я понимаю, что идея заблокировать файл не очень ложится на концепцию распределённого хранилища.

Надо признать, что совсем не ложится - нет центра, все равны.
Я думаю надо решать на уровне организации командного рабочего процесса, при котором не будет необходимости блокировать файлы. Вариантов реализации и статей на эту тему много.
Примеры:
http://habrahabr.ru/post/106912/
http://habrahabr.ru/post/75990/
Автор: KDPoid
Дата сообщения: 23.01.2016 20:03
Описанные техники подходят для случаев, когда результат работы потом можно мержить. Пока это исходники, всё красиво. А если часть проекта - бинарные файлы ? Алиса и Боб породили свои ветки, поработали в них над одним и тем же файлом...
Какой бы сложности веток мы не наплели потом, рано или поздно, их работа встретится в ветке master..
И тогда один из них увидит, как её работа будет спущена в унитаз затёрта работой другого.

А я, прежде чем дорабатывать структуру базы в каком-нибудь средстве проектирования, должен буду обзвонить всех участников и убедиться, что никто сейчас не работает над этими же диаграммами... И это мне ещё повезло, что у меня файл один...

Три рисователя иконок, встретившись в одном репозитории, будут думать, что ад и git - это синонимы...
Автор: Alexzzy
Дата сообщения: 24.01.2016 01:48
KDPoid

Цитата:
Описанные техники подходят для случаев, когда результат работы потом можно мержить

Во втором примере только один человек пушит в master. Все проблемы разруливания на него ложатся.
Если главных нет, то, как вариант:
- приготовились к push
- делаем pull
- если по результату pull-а необходимо разруливание - разруливаем и делаем опять pull, и так по кругу пока разруливания не потребуется
- делаем push
- смотрим результат и если необходимо разруливание, что мало вероятно - разруливаем по ситуации и по аналогичному алгоритму
Автор: KDPoid
Дата сообщения: 24.01.2016 08:14
Я говорю о ситуации с бинарными файлами.
Единственный вариант разруливания - выбросить часть работы.
Вот, к примеру, в проекте заказчик обфукал 150 иконок как непонятные. Алиса и Боб ушли медитировать, и через 3 дня выдали по 50 иконок, которые считают более понятными.
Вполне естественно, что в 20 случаях, они опонятили одну и ту же иконку. Что тут можно разрулить ? Главный пушер в master просто 20 раз скажет "извини, твой труд пропал не напрасно"

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

Вот про это я и спрашиваю. Если вы реально практикуете Git, что вы используете, чтобы упорядочить очередь людей, желающих править один и тот же бинарный файл ?
Автор: Alexzzy
Дата сообщения: 24.01.2016 15:55
KDPoid

Цитата:
Я говорю о ситуации с бинарными файлами.  

Я тоже, и в частности про бинарный файл средства проектирования. В этом случае ничего не пропадает, т.к. в средстве проектирования имеется merge.

Цитата:
Алиса и Боб ушли медитировать, и через 3 дня выдали по 50 иконок, которые считают более понятными.
Вполне естественно, что в 20 случаях, они опонятили одну и ту же иконку.

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

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

Для кучи бинарных иконок - да, не для этого. В остальном у Git-а больше плюсов (в сравнении с SVN), минусы меня не затрагивают.

Цитата:
Если вы реально практикуете Git, что вы используете, чтобы упорядочить очередь людей, желающих править один и тот же бинарный файл ?

Я только недавно начал практиковать Git, переведя всё из SVN под Git. Под SVN не было необходимости блокировать бинарные файлы, так что пока это для меня не проблема. Структура БД под PowerDesigner в его репозитории. Подумываю о возможности по-правильному модель PowerDesigner-а (в бинарном или xml виде) под Git положить.
Автор: KDPoid
Дата сообщения: 01.02.2016 19:25
Alexzzy,

Цитата:
про бинарный файл средства проектирования. В этом случае ничего не пропадает, т.к. в средстве проектирования имеется merge.

Это как ? Я поработал над схемой и скоммитил её локально. Тут вижу в скайпе: "Ах да, забыл предупредить, я тут накидал в схему табличек по задаче ХХХ, они уже в общем мастере, посмотри."

#$^@$% !!! ,- думаю я. А делать-то что ? При попытке втянуть схему ко мне, оно уже откажется, потому что не сможет смержить. Как я их буду объединять средством проектирования?
Сделать себе ещё одну копию удалённого мастера? Или отложить свои потуги, принять чужие с переписыванием своих, потом мержить свои обратно в средстве проектирования?

Какие-то почёсывания левого уха правой рукой.


Цитата:
В остальном у Git-а больше плюсов

А каких ? Вот, чего плохо в SVN, я и сам могу всплакнуть, а что приятного в Git? Что-то я и так и этак, всё какое-то корявое..., не могу пристроить его так, чтобы было удобно.




Автор: Alexzzy
Дата сообщения: 01.02.2016 22:18
KDPoid
Как вариант.

Цитата:
При попытке втянуть схему ко мне, оно уже откажется, потому что не сможет смержить.

Всю работу делать в локальных "рабочих" ветках. Каждая задача имеет свою ветку. Потом они "причесываются" если надо, мержатся c мастером и бесследно удаляются. Это плюс в сравнении с SVN.

Цитата:
Как я их буду объединять средством проектирования?

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

Цитата:
Какие-то почёсывания левого уха правой рукой.

Зато нет блокировок и стимулирует на быструю разработку. Кто первый запушил тот и в шоколаде.

Цитата:
а что приятного в Git?

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

Цитата:
Что-то я и так и этак, всё какое-то корявое..., не могу пристроить его так, чтобы было удобно.

Ну да, непривычно и линуксовые корни напрягают. Думаю надо хорошо разобраться и втянуться, разработав стратегию работы. Со временем должно стать удобным. Можно будет и Git-ом с svn-репозиторием работать. Втянувшихся под SVN не загонишь, как говорят.
Я пока втягиваюсь.
Автор: KDPoid
Дата сообщения: 02.02.2016 07:12

Цитата:
Локальный репозиторий - для меня важно

А почему ? Быстрый коммит? Так при современном состоянии Инета, он и удалённо - тоже быстрый.
Как-то пока получается, что поверх git-а нужна параллельная единая система , уведомлений, отметок... Всё то, что естественным образом есть в СКВ с центральным хранилищем. И какой тогда плюс в локальной копии ? Ведь и TFSVC и SVN позволит желающему получить полную копию репозитория к себе...


Цитата:
Всю работу делать в локальных "рабочих" ветках. Каждая задача имеет свою ветку.

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


Автор: Alexzzy
Дата сообщения: 02.02.2016 12:04
KDPoid

Цитата:
А почему ? Быстрый коммит? Так при современном состоянии Инета, он и удалённо - тоже быстрый.

Не, дело в том, что в основном надо подключаться к репозиторию находящемуся в удаленной сети через интернет и VPN, а это не очень удобно и связь бывает нестабильной
. Плюс бывает что интернет не доступен.

Цитата:
надо перестать думать о каждой ветке, как о направлении разработки, содержащем последовательные сборки, и попробовать порождать ветки под каждую задачу...

Да, Git позволяет "крутить" ветки как угодно.

Страницы: 1

Предыдущая тема: Получение значения типа Double из TextBox


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.