git — вопросы с ответами

Git – это, прежде всего, система контроля версий (VCS). На базе Git построено множество сервисов, таких как GitHub и GitLab, но вы можете использовать Git без применения каких-либо сторонних платформ. Это означает, что вы можете использовать Git в частном порядке или публично.

Если вы когда-либо сотрудничали с кем-либо в области цифровых технологий, вы знаете, как это происходит. Все начинается просто: у вас есть ваша версия, и вы отправляете ее своему партнеру. Он вносит некоторые изменения, так что версий становится две. Затем он отправляет измененные исходники обратно вам. Вы интегрируете их изменения в свою версию, так что количество версий вновь сокращается до одной.

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

Но всем специалистам рано или поздно нужен контроль версий. И в искусстве, и в науке нередко разрабатывают пробную версию чего-либо; это такая версия проекта, которая может стать намного лучше в будущем, или же с треском провалиться. Таким образом, вы создаете имена файлов, такие как project_justTesting.kdenlive и project_betterVersion.kdenlive, а затем project_best_FINAL.kdenlive, но с неизбежным допуском для project_FINAL-alternateVersion.kdenlive и так далее.

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

Git снепшоты

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

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

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

Интерфейсы Git

В своем естественном состоянии Git – это приложение, которое работает в терминале Linux. Однако, поскольку он хорошо спроектирован и имеет открытый исходный код, разработчики во всем мире разработали другие способы доступа к нему.

Он бесплатный, доступен любому за $0 и поставляется в пакетах для Linux, BSD, Illumos и других Unix-подобных операционных систем. Выглядит это как-то так:

Наиболее известные интерфейсы Git основаны на веб-технологиях: такие сайты, как GitHub, GitLab с открытым исходным кодом, Savannah, BitBucket и SourceForge, предлагают онлайн-хостинг кода для максимизации общественного и социального аспекта открытого исходного кода наряду. Они в разной степени основаны на GUI браузеров, чтобы облегчить обучение использования Git.

Кроме того, отдельный сервис Git или независимый разработчик может даже иметь собственный интерфейс Git, не основанный на HTML. Это особенно удобно, если вы не живете с вечно открытым браузером. Наиболее прозрачная интеграция происходит в форме поддержки файлового менеджера. Файловый менеджер KDE, Dolphin, может отображать состояние Git каталога и даже генерировать коммиты, толчки и извлечения.

Тот же Sparkleshare использует Git в качестве основы для собственного интерфейса обмена файлами в стиле Dropbox:

Когда следует использовать Git, и для чего это нужно?

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

Но что такое текст? Если вы пишете что-то в офисном приложении, таком как Libre Office, то вы, вероятно, генерируете не просто сырой текст. Обычно существует оболочка для сложных приложений, таких как это приложение, которое инкапсулирует необработанный текст в разметку XML, а затем в zip-контейнер, чтобы обеспечить доступность всех ресурсов для вашего офисного файла, когда вы отправляете этот файл кому-то другому.

Если вы используете Unix, вы можете проверить, из чего сделан файл при помощи команды file:

Если вы не уверены, вы можете просмотреть содержимое файла с помощью команды head:

Если вы видите текст, который в основном читаем, то это, вероятно, файл из текста. Если вы видите мусор с некоторыми знакомыми текстовыми символами здесь и там, то он, вероятно, не состоит из текста.

Не заблуждайтесь: Git может управлять другими форматами файлов, но не может их нормально обрабатывать. Разница в том, что в текстовом файле два снепшота Git (или коммиты, как мы их называем) могут быть, скажем, тремя строками, отличающимися друг от друга. Если у вас есть фотография, которая была изменена двумя коммитами, то как Git может выразить это изменение? Это просто невозможно, потому что фотографии не сделаны из какого-либо разумного текста, который можно просто вставить или удалить. Было бы хорошо, если бы редактирование фотографий было так же просто, как просто изменение текста с "<sky>ugly greenish-blue</sky>"на "<sky>blue-with-fluffy-clouds</sky>", но это не так.

Создание Git-репозитория

Первым шагом станет выйти и купить кассету для нашего виртуального магнитофона. С точки зрения Git, это хранилище, то есть это среда или область, где будет происходить вся работа.

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

  1. Создайте каталог (вы можете сделать это в вашем файловом менеджере GUI, если хотите).
  2. Посетите этот каталог в терминале.
  3. Инициализируйте его как каталог, управляемый Git.

В частности, запустите эти команды:

$ mkdir ~/jupiter # make directory $ cd ~/jupiter # change into the new directory $ git init . # initialise your new Git repo

В этом примере папка jupiter теперь является пустым, но допустимым Git-репозиторием.

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

Работа внутри репозитория Git происходит так же, как и работа в любом файловом каталоге. Можно создавать файлы, копировать файлы в каталог, сохранять файлы в него. Вы можете делать все как обычно; Git не вмешается, пока вы этого не захотите.

В локальном репозитории Git файл может иметь одно из трех состояний:

  • Untracked – файл, который вы создаете в репозитории, но еще не добавили в Git;
  • Tracked – файл, который вы загрузили в Git;
  • Staged – проиндексированный файл, который был изменен и добавлен в очередь коммитов Git.

Любой файл, который вы добавляете в репозиторий Git, начинает жизнь как неотслеживаемый файл (untracked). То есть файл существует на вашем компьютере, но вы еще не сказали об этом Git. Если опять применить аналогию с кассетой, то она уже будет вставлена в магнитофон, но сам магнитофон еще не включен, а потому не готов к ее воспроизведению.

Git без Git

Создание репозитория в GitHub или GitLab намного дольше, но не сложнее. Вы просто нажимаете кнопку New Repository и следуете инструкциям.

Хорошей идеей станет включение файла README, чтобы люди, блуждающие мимо, имели некоторое представление о том, для чего предназначен ваш репозиторий. Плюс намного приятнее клонировать не пустой репозиторий.

Клонирование репозитория ничем не отличается от обычного, но получение разрешения на запись обратно в него на GitHub немного сложнее, потому что для аутентификации на GitHub у вас должен быть ключ SSH. Если вы работаете в Linux, создайте его с помощью этой команды:

Затем скопируйте ваш новый ключ, который является простым текстом. Вы можете открыть его в текстовом редакторе или использовать команду cat:

Теперь вставьте свой ключ в конфигурацию SSH GitHub или в свою конфигурацию GitLab. Пока вы клонируете свой проект GitHub через SSH, вы сможете выполнять обратную запись в свой репозиторий.

Кроме того, вы можете использовать интерфейс загрузки файлов GitHub для добавления файлов, даже не имея Git в вашей системе:

Отслеживание файлов

Как показывает вывод статуса git, если вы хотите, чтобы Git начал отслеживать файл, вы должны сначала добавить его. Действие git add помещает файл в специальную промежуточную область, где файлы ожидают подтверждения или сохраняются в снепшоте. Смысл добавления git состоит в том, чтобы различать файлы, которые вы хотите включить в снепшот. А также, чтобы различать новые или временные файлы, которые вы хотите, чтобы Git игнорировал (по крайней мере на какое-то время).

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

После добавления файла Git идентифицирует его как отслеживаемый файл:

Добавление файла в систему отслеживания Git не равняется началу записи. Это просто помещение файла в рабочую среду в процессе подготовки к записи. Вы все еще можете изменить файл после того, как добавили его; он отслеживается и остается поэтапным, так что вы можете продолжить его совершенствовать или изменять, прежде чем зафиксировать его на «ленте». Но будьте осторожны: вы еще НЕ записываете, так что если вы сломаете что-то в файле, который был идеальным, вы не вернетесь назад во времени, потому что фактически у вас никогда не было этого идеального момента на кассете.

4 ответа
Я хотел бы использовать git для развертывания на веб-сайте на сервере тестирования. Мой сайт - это тема Wordpress, построенная с помощью gulp, и репозиторий выглядит как theme.git/ -- gulpfile.js -- src/ -- build/ Я выполнил описанные ниже шаги здесь и здесь, которые устанавливают голый репозиторий...
deployment
githooks
06 май 2015, в 14:19
4 ответа
Попытка pip установить репо конкретной отрасли. Google говорит мне pip install git+ https://github.com/user/repo.git@branch Название ветки - issue/34/oscar-0.6 поэтому я pip install https://github.com/tangentlabs/django-oscar-paypal.git@/issue/34/oscar-0.6 но он вернул 404. Как мне установить э...
pip
20 нояб. 2013, в 17:02
5 ответов
Я рассматриваю возможность использования LESS для разработки CSS с обработкой на стороне сервера (или разработки), но я не могу решить, следует ли хранить созданные файлы CSS в контроле версий. Существует множество решений с крючками, но это добавляет программные зависимости к серверу. Крюк можно пр...
less
version-control
01 нояб. 2012, в 19:26
16 ответов
Я сохраняю важные настройки, такие как имена хостов и порты серверов разработки и производства в моей системе управления версиями. Но я знаю, что это плохая практика хранить секреты (например, личные ключи и пароли базы данных) в репозитории VCS. Но пароли - как и любые другие настройки - кажутся, ч...
version-control
20 июль 2012, в 09:49
15 ответов
Я следую процессу разработки, когда я создаю новую локальную ветвь для каждой новой функции или сюжетной карты. Когда закончите, я объединить ветку в мастер и затем нажать. То, что со временем происходит из-за сочетания лености или забывчивости, заключается в том, что я получаю большой список локаль...
grep
version-control
16 май 2012, в 01:13
9 ответов
В http://github.com разработчик хранит файлы html, csss, javascript и изображений проекта. Как я могу видеть вывод html в браузере? например, https://github.com/necolas/css3-social-signin-buttons/blob/master/index.html когда я открываю это, он не отображает отображаемый html кода автора. он показы...
github
github-pages
09 дек. 2011, в 12:52
2 ответа
У меня есть простой, но общий вопрос рабочего процесса WordPress. Текущий рабочий процесс Я разрабатываю все локально Файлы FTP (и дампы базы данных) до сервера для отображения клиента Запросить изменения локально Файлы FTP (и дамп базы данных) снова запустите сервер Другие локальные изменени...
16 июнь 2011, в 15:36
13 ответов
Я использую git из командной строки и пытаюсь добавить разрыв строки в сообщение фиксации (используя git commit -m ""), не переходя в vim. Возможно ли это?
21 фев. 2011, в 08:59
11 ответов
Как подсчитать общее количество строк во всех файлах в репозитории git? git ls-files дает мне список файлов, отслеживаемых git. Я ищу команду для cat всех этих файлов. Что-то вроде git ls-files | [cat all these files] | wc -l
27 янв. 2011, в 20:55
22 ответа
Возможно, довольно необычная ситуация, но я хочу указать частный SSH-ключ для использования при выполнении команды оболочки (git) с локального компьютера. В основном так: git clone git@github.com:TheUser/TheProject.git -key "/home/christoffer/ssh_keys/theuser" Или даже лучше (в Ruby): with_key("/ho...
ssh
30 дек. 2010, в 20:26
19 ответов
Я использовал Git как для Windows, так и для Ubuntu во время разработки небольшого проекта, часто переворачиваясь между ними. Проблема, с которой я сталкиваюсь, заключается в том, что Git/Bash последовательно замедляется. Когда я говорю медленно, я имею в виду, что запуск cd занимает от 8 до 25 секу...
windows-7
mingw32
msysgit
19 дек. 2010, в 19:55
5 ответов
Я пытаюсь собрать некоторые из моих настроек по умолчанию, и я понял, что у меня нет стандарта для файлов .gitignore. Там отличная тема, показывающая хорошие .gitignore для проектов Visual Studio, но я не вижу много рекомендаций для Python и связанных с ними инструментов (PyGTK, Django). До сих пор ...
gitignore
pygtk
15 сен. 2010, в 15:15
22 ответа
Как проверить, изменился ли удаленный репозиторий, и мне нужно потянуть? Теперь я использую этот простой script: git pull --dry-run | grep -q -v 'Already up-to-date.' && changed=1 Но он довольно тяжелый. Есть ли лучший способ? Идеальное решение будет проверять все удаленные ветки и возвраща...
15 июль 2010, в 18:17
6 ответов
У меня есть небольшой скрипт Bash, который я использую для доступа к твиттеру и всплывающего уведомления Growl в определенных ситуациях. Каков наилучший способ хранения моего пароля с помощью скрипта? Я хотел бы передать этот сценарий в репозиторий git и сделать его доступным на GitHub, но мне инт...
security
github
passwords
07 март 2010, в 18:59
19 ответов
В среде сценариев Unix или GNU (например, дистрибутив Linux, Cygwin, OSX), каков наилучший способ определить, какая ветвь Git в настоящее время проверена в рабочем каталоге? Одно использование этого метода будет автоматически помечать выпуск (например, svnversion будет делать с Subversion). Также ...
20 окт. 2009, в 09:41
Наверх
Меню