Для начала я хочу проверить работу оператора вывода и работу с переменными. Для этого напишу пару скриптов, демонстрирующих это… Читать
Архив метки: console
Как переименовать каталоги в Linux
Переименование каталогов — одна из самых основных операций, которые вам часто приходится выполнять в системе Linux. Вы можете переименовывать каталоги из файлового менеджера графического интерфейса с помощью пары щелчков мышью или с помощью терминала командной строки.
В этой статье объясняется, как переименовывать каталоги с помощью командной строки. Читать
Git, краткий справочник команд
1. Введение
2. Настройка Git-репозитория (git config)
2.1. Справка
2.2. Чтение списка настроек
2.3. Добавление настроек
2.4. Чтение отдельной настройки
2.5. Поиск отдельной настройки
3. Создание Git-репозитория (git init)
4. Состояние репозитория (git status)
5. Подготовка файлов к фиксации (git add)
6. Фиксация изменений (git commit)
7. Возврат к любой фиксации (git checkout)
8. Работа с ветвями (git branch)
9. Обзор изменений (git diff)
10. Обзор лога фиксаций (git log)
11. Создание наблюдений (git remote)
12. Загрузка удалённого репозитория (git fetch)
13. Слияние двух состояний (git merge)
14. Обновление репозитория (git pull)
15. Клонировать репозиторий (git clone)
16. Втолкнуть изменения в удалённый репозиторий (git push)
17. Откат изменений (git reset)
18. Создание отметок готовности (git tag)
19. Заключение
Введение
Эта статья является продолжением предыдущей статьи Git, краткая теория.
Сегодня мы рассмотрим работу с Git на практических примерах. (Используется Git версии 1.7.8.msysgit.0)
В Git есть хорошая практика, которая рекомендует перед началом работы с репозиторием представиться ему, указав своё имя и электронный ящик для обратной связи. Поэтому работу с Git мы начнём с описания команд работы с конфигурацией Git
Сделаю важное замечание, я не буду углубляться во всё многообразие способов вызова той или иной команды Git, наоборот — я приведу конкретные команды для получения нужного результата.
Настройка Git-репозитория (git config)
Как говорилось в прошлой статье, настройки Git придерживаются стандартной архитектуры настроек Linux. Настройки могут быть: локальные (—local), пользовательские (—global), системные (—system).
Настройки распределены по секциям, подсекциям и имени параметра:
section.subsection.name = value
В файле конфигурации эти параметры располагаются следующим образом:
[section "subsection"]
name = valueВсе составляющие имени параметра разделяются точкой.
Подсекция может состоять из любого кол-ва подсекций:
section.subsection1.subsection2.subsectionN.name = value
Но в файле настроек всё выглядит точно так, как и раньше:
[section "subsection1.subsection2.subsectionN"]
name = valueСправка
Чтение списка настроек
весь список настроек, применяемых для текущего репозитория (сумма всех уровней настроек)
список только локальных настроек репозитория из файла .git/config
список пользовательских настроек из файла ~/.gitconfig (Заметка: в Windows путь к домашней папке можно явно указать через переменную окружения $HOME)
список системных настроек из файла /etc/gitconfig
cat .git/config
находясь в папке репозитория можно просто вывести файл настроек (команда cat не относится к git)
Добавление настроек
общий синтаксис добавления нового параметра в файл конфигурации. По умолчанию новый параметр добавляется в —local, если не указанного другого назначения.
git config user.email YourEmail@email.x
добавить настройку в локальный конфигурационный файл, атрибут —add может быть опущен, хотя я его пишу для наглядности. Смотреть следующий пример для подробностей.
git config —add user.email YourEmail@email.x
добавить информацию о вашем имени и электронном ящике в секцию user локального репозитория.
Но чтобы не выполнять эту операцию для каждого репозитория, вы можете добавить эти настройки в пользовательский файл конфигурации:
git config —global —add user.email YourEmail@email.x
теперь информация об имени и эл. ящике записана в ~/.gitconfig, и будет применяться автоматически для всех репозиториев текущего пользователя системы.
Чтение отдельной настройки
Поиск отдельной настройки
возвращает список настроек, удовлетворяющих установленным регулярным выражениям. regexpName — регулярное выражение для имени параметра. regexpValue — регулярное выражение для значения параметра.
вернёт все настройки, в имени которых встречается слово «user».
вернёт все настройки, имя которых начинается на «user». Говоря иначе — вернёт все настройки из всех секций [user].
получить список настроек секции «user» только из файла пользовательских настроек ~/.gitconfig
Создание Git-репозитория (git init)
Команда git init создаёт новый репозиторий
создать «простой» репозиторий в текущей папке. Это основной репозиторий, с которым нам предстоит работать.
создать «голый» репозиторий в текущей папке (используется как централизованное хранилище при централизованном стиле разработки).
создать новую папку repo в текущей папке и создать в ней репозиторий
Состояние репозитория (git status)
Команда git status позволяет узнать текущее состояние репозитория.
Подготовка файлов к фиксации (git add)
Команда git add добавляет файл или группу файлов в index (staging area). (В дальнейшем добавленные файлы могут будь зафиксированы в репозитории командой git commit
добавить все файлы и папки текущей директории в index (staging area)
Фиксация изменений (git commit)
Команда git commit переносит изменения из index (staging area) в local repo.
После оп
ерации фиксации вам необходимо заново заполнять область index (staging area)
фиксирует изменения, добавленные в staging area, в репозитории. Заметьте, чтобы зафиксировать изменения, их надо сначала добавить в staging area командой «git add .«.
Возврат к любой фиксации (git checkout)
Команда git checkout позволяет загрузить любое состояние репозитория в working tree.
При возврате к фиксации, work tree переходит в состояние на тот момент фиксации: исчезают файлы, которых не было в тот момент, появляются файлы, которые были на тот момент. (Заметка: checkout можно выполнить, только тогда, когда у вас нет никаких изменений в текущем состоянии working tree. В ином случае вам следует их зафиксировать или отказаться от них).
где nameBranchOrCommit — либо первые четыре (или более) символов имени фиксации, либо имя ветки.
Имя фиксации — это сорока символьная строка, например: b4d470fc242c41d1e270a4041edf673586f8325a
переключиться на фиксацию с именем, начинающимся на «b4d4». Заметка: при таком переключении у вас меняется текущая ветка на ветку «(no branch)». Заметка: вы можете указать имя фиксации, которая располагается в любой ветви и вы будете перенесены на эту точку фиксации.
переключиться на ветвь master (переключение происходит на верхушку ветви)
переключиться на одну фиксацию назад относительно верхушки ветви master
переключиться на одну фиксацию назад относительно текущего вашего положения.
Заметка: при каждой операции checkout ссылка head указывает на текущее положение.
Заметка2: не рекомендуется создавать ветвь с одноимённым названием head, т.к. head — это ссылка на текущее состояние.
переключиться на две фиксации назад относительно фиксации с именем, начинающимся на «b4d47».
Работа с ветвями (git branch)
Команда git checkout обеспечивает работу с ветвями. Просмотр, создание и удаление ветвей разработки
просмотреть список существующих ветвей и узнать какая ветвь выбрана текущей
просмотреть список удалённых ветвей (ветвей из репозиториев, за которыми мы «наблюдаем»);
создать ветвь с именем name. Создание ветви не приводит к переключению в эту ветвь, для этого используйте команду git checkout branchName. Созданная ветвь ответвляется от текущего состояния репозитория.
удаляет ветвь branchName. Если ветвь ещё не была с лита с основной ветвью, то git предупредит об этом и удаления не будет
Обзор изменений (git diff)
Команда git diff позволяет увидеть изменения между разными состояниями фиксаций, или между текущими изменениями и последней фиксацией.
показать изменения между work tree и index (staging area)
показать изменения между index (staging area) и local repo
показать суммарные изменения, произошедшие при перемещении от фиксации master~2 к фиксации master.
Заметка: если вы только добавляли текст, то будут отображаться «плюсики» в начале добавленных строк.
показать суммарные изменения, которые произошли при перемещении от фиксации master к фиксации master~2.
Заметка: в отличии от предыдущего примера, здесь будет показано, что строки были удалены — знаки «минуса» в начале строк.
</div >
Заметка: возможно такое сравнение не будет иметь смысл, если ветви не имеют общего предка, но… всё на ваше усмотрение.
Обзор лога фиксаций (git log)
Команда git log позволяет увидеть историю фиксаций от начала до текущего состояния HEAD.
показать историю фиксаций от начала до текущего состояния HEAD.
показать историю фиксаций от начала до указанной ветви или имени фиксации
показать историю фиксаций от начала до предпоследний фиксации на ветви anyBranch
показать историю фиксаций от пре-предпоследней фиксации до последней фиксации по ветви master
Заметка: обратите внимание, что запись «git log master..master~2» не покажет ничего.
покажет историю фиксаций от места ответвления ветки br1 (от ветки master) до текущего состояния по ветке master.
Заметка: ветка br1 должна быть ответвлена от ветки master
покажет общую историю фиксаций от места ответвления ветки br1 до текущего состояния ветки master. В историю попадут как фиксации сделанные по ветке master, так и фиксации сделанные по ветке br1. Обратите внимание, что диапазон указан с тремя точками, именно это отличает данный пример от предыдущего.
то же, что и «git log«, покажет историю фиксаций от начала до текущего состояния
покажет историю фиксаций от начала до состояний FETCH_HEAD
Заметка: состояние FETCH_HEAD становится доступным после выполнения операции git fetch или git pull.
покажет историю фиксаций по текущей ветви начиная от места, где совпадают состояния HEAD и FETCH_HEAD, и до конца истории.
Создание наблюдений (git remote)
Команда git remote применяться для создания «наблюдений» за другими репозиториями. Позволяет удобно сливаться с другими репозиториями.
выводит список существующих «наблюдений»
добавляет новое наблюдение с именем name до репозитория, расположенного по пути path.
Загрузка удалённого репозитория (git fetch)
Команда git fetch позволяет загрузить удалённый репозиторий в раздел «наблюдения» локального репозитория. Загрузить репозиторий — ещё не значит «слиться» с ним. Для слияния используется команда git merge.
подгружает данные по текущей ветке из соответствующей ветки удалённого репозитория, или подгружает данные из соседней ветки локального репозитория
Слияние двух состояний (git merge)
Команда git merge выполняет слияние двух состояний HEAD и FETCH_HEAD в новое HEAD состояние. Если происходит конфликт изменений, то эти файлы выходят из index (staging area), до тех пор, пока вы не исправите конфликт и не поместите их обратно в index командой «git add .«.
Команда слияния всегда занимает отдельную фиксацию, при слиянии не допускается изменение каких-либо файлов
Обновление репозитория (git pull)
Команда git pull выполняет подгрузку удалённого репозитория и производит слияние с ним. Данная операция аналогична последовательному выполнению двух операций: git fetch и git merge.
Клонировать репозиторий (git clone)
Команда git clone создаёт копию репозитория и устанавливает настройки для наблюдения за оригинальным репозиторием. Эти настройки применяются в командах fetch, push, pull.
Втолкнуть изменения в удалённый репозиторий (git push)
Команда git push позволяет втолкнуть изменения текущего репозитория в удалённый. По умолчанию, вталкивать данные можно только в «голые» репозитории.
вталкивает данные всего локального репозитория в соответствующие ветки удалённого репозитория
Заметка: данный способ вызова команды является первым при первой фиксации в пустой удалённый репозиторий.
Откат изменений (git reset)
Команда git reset позволяет откатить изменения или неудачное слияние до последнего стабильного состояния (до последней фиксации).
отменит операцию слияния, но оставит изменения в конфликтующих файлах и/или в index области. При этом состоянии Git будет ожидать от вас фиксации или полной отмены изменений.
Создание отметок готовности (git tag)
Команда git tag позволяет отметить текущее состояние, как некоторое конечное состояние для новой версии вашего проекта. Используется для создания списка стабильных версий проекта. Заметка: имя метки tag может использоваться в командах checkout и других командах, на ровне с именами фиксаций, именами ссылок (HEAD, FETCH_HEAD) и именами веток (master и т.п.).
показать список существующих tag-ов
создать метку tag для текущего состояния (на текущей ветке) с именем tagname.
Заключение
В этой части мы кратко рассмотрели список наиболее часто используемых команд при работе с Git. В следующей части мы рассмотрим практические примеры работы с Git.
Читать далее: Git в примерах
Смотрите также:
Автор: galiego710
Как напечатать UTF-8 текст из bat-файла?
Это просто! Надо всего лишь прочитать 100-500 мануалов по командной строке Windows и провести 200 экспериментов по написанию bat-скриптов)
Если серъёзно, то вывести файл с текстом в формате UTF-8 можно следующим образом
@echo off set file=YourFileName cmd /u /c chcp 65001 | echo my super text1 > "%file%" cmd /u /c chcp 65001 | echo my super text2 >> "%file%" cmd /u /c chcp 65001 | echo my super text3 >> "%file%" ...
Кавычки в записи «%file%» нужны по той причине, что имя файла может содержать пробелы. Читать
Как установить текущую дерикторию для Cygwin?
Любители работать в консоли, подобной консоли линукса, могут установить себе Cygwin, юникс подобную среду, где будут доступны стандартные консольные программы из линукса.
Ставится Cygwin довольно просто. В процессе установки в одном из режимов можно выставить флажки напротив программных пакетов, которые вы хотите установить. Я выбрал себе пакеты nano, git и что-то ещё.
После инсталляции на рабочем столе появляется ярлычок Cygwin для запуска среды.
Запуск Cygwin из любой папки
Так как я пользуюсь TotalCommander-ом, мне удобно запускать программы сразу из нужной мне директории. Создадим удобный bat-файл для запуска Cygwin.
Сразу, без долгих размышлений, копируем строку «Объект» из свойства этого ярлыка в новый созданный нами файл C:binbash.bat
Полное содержимое файла будет выглядеть так:
@start "" C:cygwinbinmintty.exe -i /Cygwin-Terminal.ico -
Обратите внимание на то, что путь до exe-файла у вас может быть другим. У себя я установил Cygwin в директорию C:cygwin.
Также если директория C:bin у вас ещё не добавлена в переменную окружения PATH, то это следует сделать.
Настройка запуска Cygwin
После некоторой работы с Cygwin я обнаружил, что не смотря на то, что запускать Cygwin я могу из любой директории, просто прописав слово bash, сама же запускаемая среда всегда открывается в домашней директории вашего пользователя. (Домашняя директория установлена в переменной окружения HOME).
Это выглядит не очень удобно, ведь если я пишу команду bash, находясь в директории D:xyz, то я и рассчитываю, что запущенный Cygwin также будет находиться в директории D:xyz.
Если вы обратите внимание, то увидите, что ярлык с рабочего стола запускает утилиту mintty.exe. Мы сразу понимаем, что необходимо ознакомиться с перечнем входящих атрибутов для данной команды.
Открываем Cygwin и вводим
man mintty
После внимательного изучения мануала, мы радуемся некоторым возможностям, о которых не подозревали, а именно: возможности задать размеры и координаты запускаемого окна Cygwin.
Открываем наш bat-файл и изменяем его содержимое на следующее:
@start "" C:cygwinbinmintty.exe -i /Cygwin-Terminal.ico --size 120,77 --position -4,0 -
В данном случае я установил нужный мне размер окна Cygwin и позицию появления окна (отрицательное значение -4 нужно, чтобы кромка окна оказалась за границей монитора, и её не было видно).
Теперь моё окно будет всегда появляться в удобных мне координатах, а не будет смещаться при каждом новом запуске на +8 пикселей по x,y.
Но как же быть с директорией запуска Cygwin?
Ведь переходить в нужную директорию из домашней — жутко не удобно!
Решение было найдено! Для установки текущей директории при запуске Cygwin мы можем использовать скрипт автозапуска для запускаемой среды bash.
Значит нам нужно усовершенствовать наш bash.bat файл таким образом, чтобы он создавал файл автозапуска для запускаемой консоли bash
Запускаем Cygwin, вводим команду «man bash» и читаем документацию в поисках необходимого нам. Находим несколько вариантов имён файлов для домашней директории пользователя, который запускаются при авторизации в bash.
Файлы, запускаемые при авторизации в bash:
~/.bash_profile ~/.bash_login ~/.profile
Файл, запускаемый при запуске «bash без авторизации в нём
~/.bashrc
Важное замечание: файл автозапуска ~/.bash_login (или любой другой) должен быть написан в кодировке UTF-8! И не должен использовать символы r. (Например команда pwd у меня не выполнялась, когда файл содержал в конце символ r, свойственный системе Windows).
Как оказалось, вывести UTF-8 текст из CMD не так-то просто, но возможно!
Вот пример, как это делается:
cmd /u /c chcp 65001 | echo некий текст >"имя_файла"
Усовершенствуем наш C:binbash.bat файл, теперь он имеет содержимое:
@echo off SET file=.bash_login cmd /u /c chcp 65001 | echo #!/bin/bash > "%HOME%%file%" cmd /u /c chcp 65001 | echo cd "%CD:=/%" >> "%HOME%%file%" @start "" C:cygwinbinmintty.exe -i /Cygwin-Terminal.ico --size 120,77 --position -4,0 -
После запуска, консоль bash выполняет содержимое файла ~/.bash_login. Этот файл должен быть в формате UTF-8. Для этого мы вызываем CMD cо флагом /u, который сообщает, что запускаемая консоль должна возвращать результат в формате UTF-8.
Далее в этой же строке после флага /с мы передаём команду. К
стати, флаг /с означает, что после выполнения переданной команды, консоль закрывается.
Как можно увидеть, мы передаём две команды, разделённых знаком |. Данный знако позволяет записать две нужных нам команды в одну строку.
Первая команда chcp 65001 устанавливает кодировку UTF-8 в запущенной консоли. (Чтобы узнать, какая текущая кодировка установлена в консоли, достаточно вызвать команду chcp без параметров.)
Вторая команда echo текст > «%HOME%%file%» печатает соответствующий текст в файл с именем «%HOME%%file%«, где имена переменных развёртываются в путь к домашней директории и имени файла .bash_login.
Обратите внимание на необычное обращение к переменной CD, в которой содержится текущий каталог cmd-консоли. Если обычно переменная развёртывается записью
%CD%
То в нашем случае, мы используем запись
%CD:=/%
Что позволяет сразу заменить все слеши в стиле Windows на слеши в стиле Linux / .
Не забываем помещать все имена файлов и директорий в двойные кавычки, таким образом это позволит попадать в директории содержащие пробелы.
За счёт того, что используется UTF-8, данная конструкция успешно позволяет открывать Cygwin в директориях с русскими именами.
Таким образом, при каждом запуске в консоли команды bash, будет запускаться скрипт C:binbash.bat, который перезаписывает файл автозагрузки среды bash в Cygwin. Теперь мы можем легко и удобно запускать консоль bash из любой директории и сразу попадать в эту же самую директорию в bash-консоли.
Радуемся и наслаждаемся результатом!
Подведём итоги
- Мы установили Cygwin
- Создали файл C:binbash.bat с содержимым
@echo off SET file=.bash_login cmd /u /c chcp 65001 | echo #!/bin/bash > "%HOME%%file%" cmd /u /c chcp 65001 | echo cd "%CD:=/%" >> "%HOME%%file%" @start "" C:cygwinbinmintty.exe -i /Cygwin-Terminal.ico --size 120,77 --position -4,0 -(Заметка: путь C:bin должен содержаться в переменной окружения PATH)
За счёт этого мы добились:- запуска терминала Cygwin в указанной позиции экрана (параметр —position)
- запуска окна определённого размера (параметр —size)
- запуска Cygwin из любой директории, набрав в консоли слово bash
- при этом запущенный Cygwin располагается в той же директории, откуда был запущен!
Автор: galiego710
Git, в примерах
1. Введение
2. Запуск консоли для работы с Git
3. Git, простые примеры
3.1. Настройка Git-репозитория
3.1.1. Пример 1: создание репозитория и установка локальных настроек
3.1.2. Пример 2: то же что и пример1, но короче запись
3.1.3. Пример 3: установка пользовательских настроек
3.2. Простые операции с одним репозиторием
3.2.1. Пример 1: создать репозиторий, зафиксировать изменения
3.2.2. Пример 2: создать репозиторий, сделать 3 фиксации
3.2.3. Пример 3: работа с git checkout (возврат)
3.2.4. Пример 4: работа с git checkout и git branch (возврат и создание новой ветки)
3.2.5. Пример 5: работа с git branch (слияние двух веток)
3.3. Операции с двумя репозиториями
3.3.1. Пример 1: создать реп, отклонироваться, внести изменения в первый, обновиться во втором
3.3.2. Пример 2: создать два репозитория, внести изменения в оба, второй слить с первым
3.3.3. Пример 3: создать два репозитория, внести изменения в оба, второй слить с первым
3.3.4. Пример 4: втолкнуть данные в удалённый пустой репозиторий
3.3.5. Пример 5: втолкнуть данные в удалённый не пустой репозиторий
3.4. Заключение
Введение
В этой части мы рассмотрим работу с репозиторием git на примерах
Команды, которые будут использоваться здесь, кратко описаны в предыдущей части Git, краткий справочник команд.
