Продолжаем осваивать Git
Начало тут
После того как мы создали пустой репозиторий на сервере, нужно добавить туда наш проект
git add * && git commit -m "Initial commit" && git push origin master |
где,
origin это сервер на котором у нас код… и добавляется он вот так
git remote add origin ssh://git@<hostname>/git/test.git </hostname> |
Возможны ошибки при первом комите:
root@client:app# git push Password: No refs in common and none specified; doing nothing. Perhaps you should specify a branch such as 'master'. fatal: The remote end hung up unexpectedly error: failed to push some refs to 'ssh://root@giserver.com/git/app' |
Указываем явно куда пушить
root@gitclient# git push origin master Password: Counting objects: 3, done. Writing objects: 100% (3/3), 203 bytes, done. Total 3 (delta 0), 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 ssh://root@gitserver.com/git/app ! [remote rejected] master -> master (branch is currently checked out) error: failed to push some refs to 'ssh://root@gitserver.com/git/app' |
Все равно не поддается на провокацию. Сия ситуация хорошо описана тут http://pete.akeo.ie/2011/07/git-remote-repository.html
Git думает что раз репозиторий пустой, то есть не завершенный первый коммит и не дает простому смертному стать первым. Для этого мы на сервере создадим новую ветку:
root@gitserver : git checkout -b first-commit Switched to a new branch 'first-commit' root@gitserver $ git symbolic-ref HEAD refs/heads/first-commit |
После этого можем внести изменения в код на клиенте и передать это на сервер
echo "new file" > README git add README git commit -m "Added file README" git push origin master |
1. Создаем новый файл
2. Добавляем в индекс
3. Коментируем и комитим
4. Передаем на сервер
Когда захотим просмотреть все изменения в проекте:
git log |
Если нужно детальнее посмотреть информацию с diff
git log -p -2 |
Вот так выглядит diff для новосозданого файла
commit 56907f69cb50bfd2c8d9fd01740c62c6f4c40a7e Author: reverse <o@m.in.ua> Date: Tue Jun 2 09:56:38 2015 +0300 added README diff --git a/README b/README new file mode 100644 index 0000000..656e4fd --- /dev/null +++ b/README @@ -0,0 +1 @@ +new file |
Для просмотра diff на уровне слов, а не строк можно использовать такую команду
git log -U1 --word-diff |
На выходе что то похожее на это
new commit for query diff --git a/rpc.rb b/rpc.rb index 9b54be4..1b3555d 100644 --- a/rpc.rb +++ b/rpc.rb @@ -4,3 +4,3 @@ class MyClass def dosomething(a) puts "response for {+query+} #{a}" |
Если нужна краткая информация :
git log --stat |
Если проект большой и старый:
git log --since=2.weeks |