Нужно в проект на сервере в файле config добавить
[http] receivepack = true
Рассказываю сложные вещи простыми словами
Нужно в проект на сервере в файле config добавить
[http] receivepack = true
Устанавливаем следующие компоненты:
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/
It’s not a Git error message, it’s the editor as git uses your default editor.
To solve this:
Решил собрать небольшой справочник по 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:
Зачастую, у вас имеется группа файлов, которые вы не только не хотите автоматически добавлять в репозиторий, но и видеть в списках неотслеживаемых. К таким файлам обычно относятся автоматически генерируемые файлы (различные логи, результаты сборки программ и т.п.). В таком случае, вы можете создать файл .gitignore с перечислением шаблонов соответствующих таким файлам. Вот пример файла .gitignore:
$ cat .gitignore
*.[oa]
*~
Первая строка предписывает Git’у игнорировать любые файлы заканчивающиеся на .o или .a — объектные и архивные файлы, которые могут появиться во время сборки кода. Вторая строка предписывает игнорировать все файлы заканчивающиеся на тильду (~
), которая используется во многих текстовых редакторах, например Emacs, для обозначения временных файлов. Вы можете также включить каталоги log, tmp или pid; автоматически создаваемую документацию; и т.д. и т.п. Хорошая практика заключается в настройке файла .gitignore до того, как начать серьёзно работать, это защитит вас от случайного добавления в репозиторий файлов, которых вы там видеть не хотите.
К шаблонам в файле .gitignore применяются следующие правила:
/
) для указания каталога.!
) в качестве первого символа.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.
Скачиваем утилитку 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