gitまとめ
全然分かっていないけどひとまずメモしておく。
サーバー側にリポジトリを作成して、クライアント側でそれをclone&pushさせたい場合。
まずサーバー側でtest.gitという名前のリポジトリを作成
cd /home/user/git_test mkdir test.git cd test.git cat > sample1 sample1 Ctrl-D git init // .gitが作成される git add * git commit -m "initial import test" git log
これをクライアント側でcloneする
git clone ssh://<ユーザー名>@<ホスト名>:<ポート>/home/user/git_test/test.git
sample1を適当に変更し、コミットする
cd test cat > sample1 sample2 Ctrl-D git diff // 差分が表示される git status // 変更したファイル一覧が表示される git add sample1 // addは追加するコマンドではなく、commitするファイルを指定する役割 git commit -m "change sample1" git log
この時点ではまだ、サーバー側のリポジトリには反映されない。
サーバー側に反映させるには、pushを実行する。
git push ssh://<ユーザー名>@<ホスト名>:<ポート>/home/user/git_test/test.git master
しかしこれを実行すると以下のエラーが発生する
remote: error: refusing to update checked out branch: refs/heads/master 以下略
対処法としては、サーバー側で以下のコマンド実行するらしい
cd /home/user/git_test/test.git git config --get-all core.bare // falseになっているはず git config --bool core.bare true // trueに変更する git config --get-all core.bare // trueになること
そうすると、先ほどのpushが成功する。
その後、サーバー側でgit logを実行して、"change sample1"が反映されていればOK(のはず。。)
ここで分からなかったのが、リポジトリ側でsample1の中身がsample2に更新されないこと。
そういうものなんだろうか?
サーバー側がマスターだと思うから、pushと同時にサーバー側のファイルも更新されると思うんだけど、されないらしい。
また、core.bare trueの状態で、git statusとかを実行すると以下のエラーが起きる。
fatal: This operation must be run in a work tree
これを出さないようにするためには、再度core.bare falseに戻す必要がある。
falseに戻した後、git statusを実行するとsample1が変更されたこと(中身がsample1のままであるため)になっている。
# On branch master # Changes to be committed: # (use "git reset HEAD <file>..." to unstage) # # modified: sample1 #
本来は、sample1の中身をsample2に変更しているので、変更を反映させたい(ローカルの修正を取り消したい)場合
git reset HEAD sample1 git checkout -- sample1
これでsample1の中身はsample2となる。
とりあえず現時点で分からないのが、pushした後、リモートリポジトリにファイルが反映されない件。
いや、正確には反映はされるんだけど、それがサーバー側のローカルのファイルに反映されない件。
参考サイト
Git超入門:"git push origin master"の"push"と"origin"と"master"の意味がわからないあなたへ · DQNEO起業日記
git - 簡単ガイド