Настройка и установка git на собственном сервере

Устанавливаем следующие компоненты:

apt-get install git

apt-get install fcgiwrap spawn-fcgi — нужно для nginx

apt-get install gitweb — web сайт для git. Настройки можно изменить в /etc/gitweb.conf (обычно здесь меняет параметр $projectroot)

Настраиваем nginx для GitWeb

server
{
  access_log /var/log/nginx/gitweb.access.log;

  error_log /var/log/nginx/gitweb.error.log info;

  server_name gitweb.developernote.com;

  location /index.cgi {
    root /usr/share/gitweb/;
    include fastcgi_params;
    gzip off;
    fastcgi_param SCRIPT_NAME $uri;
    fastcgi_param GITWEB_CONFIG /etc/gitweb.conf;
    fastcgi_pass  unix:/var/run/fcgiwrap.socket;
  }
  location / {
    root /usr/share/gitweb/;
    index index.cgi;
  }
}

Далее создаем директорию для хранения репозиториев

cd /var/www
mkdir git
cd /var/www/git
git init --bare project.git
cd project.git
touch readme
git add .
git commit -m "first"
chown -R www-data:www-data . 
chmod -R 777 .
service fcgiwrap restart # возможно это не нужно выполнять

После этого можно спокойно открыть сайт по адресу gitweb.developernote.com

Теперь настраиваем сам git. В Nginx добавляем еще один сайт

server
{
  access_log /var/log/nginx/git.access.log;

  error_log /var/log/nginx/git.error.log info;

  server_name git.developernote.com;

  gzip off;

  location / {
        root /home/git/repositories;

        fastcgi_pass unix:/var/run/fcgiwrap.socket;
        fastcgi_param SCRIPT_FILENAME   /usr/lib/git-core/git-http-backend;
        fastcgi_param PATH_INFO         $uri;
        fastcgi_param GIT_PROJECT_ROOT  /home/git/repositories;
        fastcgi_param GIT_HTTP_EXPORT_ALL "";
        fastcgi_param REMOTE_USER $remote_user;
        include fastcgi_params;
  }
}

И если все правильно настроить, то гит должен заработать

Чтобы использовать авторизацию нужно установить

apt-get install apache2-utils

sudo htpasswd /var/www/git/htpasswd hitesh , где
/var/www/git/htpasswd путь где содержится файл, каталог которого должен быть заблокирован
hitesh — имя пользователя для доступа

И в Настройках nginx сайтов прописываем

server
{
 ...
  auth_basic "GitWeb requires authorization";
  auth_basic_user_file /home/git/.gitpasswd;
  
  ...
}

Оригинал статьи: https://developernote.com/2015/01/installing-git-on-ubuntu-12-04-and-enabling-http-access-with-nginx/

Закрыть окно merge_msg

It’s not a Git error message, it’s the editor as git uses your default editor.

To solve this:

  1. press «i»
  2. write your merge message
  3. press «esc»
  4. write «:wq»
  5. then press enter

Короткий справочник по git командам

Оригинал статьи

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

 

*Основы*


Настройка Git клиента для идентификации пользователя:

git config –global user.name “Your Name”

git config –global user.email “your@email.address”

git config –global core.editor “your editor”

 

Инициализация репозитория в текущем каталоге:

git init

 

Создает репозиторий в указанном каталоге:

git init <directory>

 

Клонирование репозитория на локальную машину:

git clone <repo>

 

Добавить файл для идексации и следить за всеми изменениями в нем ( можно задавать по маске ):

git add <file>

 

Добавить каталог для индексации:

git add <directory>

 

Удалить файл из индексации ( можно задавать по маске ):

git rm <file>

 

Перенести или переименовать файл / каталог:

git mv <source> <destination>

 

Сделать “снапшот” всех выполненных изменений:

git commit -a -m “message”

 

Статус репозитория ( добавление, удаление, изменение файлов ):

git status

 

Показать историю коммитов:

git log

 

Показать только определенное количество коммитов:

git log -n <limit>

 

Показать историю коммитов по конкретному файлу:

git log <file>

 

Посмотреть различия между последним коммитом и текущими изменениями:

git diff

 

Просмотр всех различий между коммитами:

git diff <commit> <commit>

 

Посмотреть различия между коммитом и текущими изменениями:

git diff <commit> <file>

 

Посмотреть различия между коммитами для файла:

git diff <commit> <commit> <file>

 

Показать список всех файлов в основной ветке:

git ls-tree master -r –name-only

 

*Работа с ветками*


Список веток:

git branch

 

Создание ветки:

git branch <new_branch_name>

 

Безопастное удаление ветки, если не были сделаны изменения:

git branch -d <branch_name>

 

Удаление ветки, даже если были сделаны изменения:

git branch -D <branch_name>

 

Переименование текущей ветки:

git branch -m <rename_current_branch>

Отмена изменений в локальном файле

git checkout FETCH_HEAD — — <file>

 

Переход к существующей ветке:

git checkout <branch_name>

 

Создание и переход к ветке:

git checkout -b <new_branch_name>

 

Слияние текущей ветки с указанной:

git merge <branch>

 

*Откат изменений*


Перейти на последний коммит ветки “master”:

git checkout master

 

Откатить изменения во всех файлах до указанного коммита:

git checkout <commit>

 

Откатить изменения для конкретного файла до указанного коммита:

git checkout <commit> <file>

 

Сделать откат всех изменений выполненных в коммите, при этом создается новый коммит указывающий на откат изменений:

git revert <commit>

 

Отмена изменений до последнего коммита, а также сбрасывает индексацию для конкретного файла:

git reset HEAD <file>

 

Отмена изменений до последнего коммита и сбрасывает индексацию:

git reset –soft

 

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

git reset –hard

 

programming Удаляет файлы которые не были добавлены в репозиторий:

git clean -f

 

Удаляет файлы которые не были добавлены в репозиторий по указанному пути:

git clean -f <path>

 

Удаляет файлы и каталоги которые не были добавлены в репозиторий:

git clean -df

 

Только показывает, что будет удаленно:

git clean -n

*Работа с удаленными репозиториями*


Список соединений с удаленными репозиториями:

git remote

 

Добавить соединение:

git remote add <name> <url>

 

Удалить соединение:

git remote rm <name>

 

Переименовать соединение:

git remote rename <old_name> <new_name>

 

Получить изменения из репозитория со списком всех веток ( при этом стираются любые локальные изменения ):

git fetch <remote>

 

Получить изменения из репозитория для конкретной ветки ( при этом стираются любые локальные изменения ):

git fetch <remote> <branch>

 

Получить копию текущей ветки с удаленного репозитория и слить ее с локальной копией:

git pull <remote>

 

Залить указанную ветку на удаленный репозиторий:

git push <remote> <branch>

 

И напоследок несколько ссылок где можно найти более подробное руководство по git:

 

Git How To

Pro Git

Git Reference

Atlassian Git Tutorials

Игнорирование файлов в git

Игнорирование файлов

Зачастую, у вас имеется группа файлов, которые вы не только не хотите автоматически добавлять в репозиторий, но и видеть в списках неотслеживаемых. К таким файлам обычно относятся автоматически генерируемые файлы (различные логи, результаты сборки программ и т.п.). В таком случае, вы можете создать файл .gitignore с перечислением шаблонов соответствующих таким файлам. Вот пример файла .gitignore:

$ cat .gitignore
*.[oa]
*~

Первая строка предписывает Git’у игнорировать любые файлы заканчивающиеся на .o или .a — объектные и архивные файлы, которые могут появиться во время сборки кода. Вторая строка предписывает игнорировать все файлы заканчивающиеся на тильду (~), которая используется во многих текстовых редакторах, например Emacs, для обозначения временных файлов. Вы можете также включить каталоги log, tmp или pid; автоматически создаваемую документацию; и т.д. и т.п. Хорошая практика заключается в настройке файла .gitignore до того, как начать серьёзно работать, это защитит вас от случайного добавления в репозиторий файлов, которых вы там видеть не хотите.

К шаблонам в файле .gitignore применяются следующие правила:

  • Пустые строки, а также строки, начинающиеся с #, игнорируются.
  • Можно использовать стандартные glob шаблоны.
  • Можно заканчивать шаблон символом слэша (/) для указания каталога.
  • Можно инвертировать шаблон, использовав восклицательный знак (!) в качестве первого символа.

Glob-шаблоны представляют собой упрощённые регулярные выражения используемые командными интерпретаторами. Символ * соответствует 0 или более символам; последовательность [abc] — любому символу из указанных в скобках (в данном примере a, b или c); знак вопроса (?) соответствует одному символу; [0-9] соответствует любому символу из интервала (в данном случае от 0 до 9).

Вот ещё один пример файла .gitignore:

# комментарий — эта строка игнорируется
# не обрабатывать файлы, имя которых заканчивается на .a
*.a
# НО отслеживать файл lib.a, несмотря на то, что мы игнорируем все .a файлы с помощью предыдущего правила
!lib.a
# игнорировать только файл TODO находящийся в корневом каталоге, не относится к файлам вида subdir/TODO
/TODO
# игнорировать все файлы в каталоге build/
build/
# игнорировать doc/notes.txt, но не doc/server/arch.txt
doc/*.txt
# игнорировать все .txt файлы в каталоге doc/
doc/**/*.txt

Шаблон **/ доступен в Git, начиная с версии 1.8.2.

Работа с git

Скачиваем утилитку https://git-for-windows.github.io/ для работы из под Windows.
Добавление удаленного репозитория

git remote add origin https://github.com/tutorialzine/awesome-project.git
# пример использования 
# git push origin master

Добавление файла

git add feature.txt
git commit -m "New feature complete."
# -m это параметр для указания сообщения

Создание новой ветки

git branch amazing_new_feature

Просмотр веток

git branch

Переключение на ветку

git checkout amazing_new_feature