Home New Help Edit

Git memo

2011-05-28
Suns & Moon Laboratory
Gitを使ってみようかと思う。
Windows + MsysGit + TortoiseGit


originとmasterとHEAD

origin リポジトリの場所(URL)の別名
master(main) ブランチの名前。とある騒動でmainへと改名された。
HEAD 最新の変更点


Git - originとmasterとは何か(初心者向け)
GitのHEADとは?origin/HEADとの違いは?初心者向けに画像でやさしく解説!

Linuxで使ってみる

AlmaLinux8

dnf install -y git git config --global user.email "メールアドレス" git config --global user.name "名前"
"--global"つけなければ、リポジトリローカルに設定できるらしい


ローカルリポジトリ作成
mkdir test.git git init --bare test.git git config --global init.defaultBranch main git branch -m main

クローン
git clone test.git

ファイル追加
cd test git add a.txt git commit -m 'initial import'

プッシュ
git push

ログ
git log

ブランチとfetch,merger,push,pull


ブランチpos2を作成し、mainでの変更を取り込んでいく
その時のRevision Graphを見てみた。

ミラーリポジトリ


リポジトリのミラーしたベアクローンを作成
git clone --mirror //nasorg/folder/test.git
リポジトリの同期
git fetch -p origin git push --mirror
コンフリクトはベアじゃないリポジトリで行う。





参考
リポジトリを複製する

NASにリポジトリ作って運用してみる3。


ローカルのみで作業していたリポジトリを、NASのBareリポジトリへ移行してみる。

エクスプローラー右クリックから、「Git Bash Here」して、コマンドラインを使う。

これをしてもoriginが表示されない。
git remote -v
originが無いので、originを作成する
git remote add origin /c/current_repo
origin確認
git remote -v origin c:/current_repo (fetch) origin c:/current_repo (push)
origin変更
git remote set-url origin //nas_name/repo.git
origin確認
git remote -v origin //nas_name/repo.git (fetch) origin //nas_name/repo.git (push)
pushする
git push -u origin main

NASにリポジトリ作って運用してみる2。Bareリポジトリのフォルダ名には.gitを付ける。

どうもbareフォルダ名は{reponame}.gitという感じで「.git」を付けるということらしい。(今さら気づいた...)

NASにフォルダを掘る
\\nas_name\git\test3.git

リポジトリを作る
TortoiseGitで「Git create repository here...」をやるとダイアログが表示されるので
「Make it Bare」にチェックを入れてOKを押す。(フォルダ名に.gitついていると自動でチェックが入るぽい)

作業フォルダで、TortoiseGitでGit Cloneして、URLに
\\nas_name\git\test3.git
を指定する。

クローンしたフォルダには.gitが付かない。(c:\tmpでクローンした場合)
c:\tmp\test3


NASにリポジトリ作って運用してみる1

既にローカルで作業しているリポジトリを、NASにbareリポジトリ作成してPUSHしてみる。

nas_name NASの名前
//nas_name/git NASが公開しているフォルダ

$ mkdir //nas_name/git/test $ git init --bare //nas_name/git/test Initialized empty Git repository in //nas_name/git/test/ $ git remote -v 何も表示されない mike@bmxps13 MINGW64 /c/data/trunk/test (master) $ ls test.txt ファイルが1個入っている。(ローカルリポジトリにaddしてコミット済) $ git status On branch master nothing to commit, working tree clean $ git remote add origin //nas_name/git/test $ git remote -v origin //nas_name/git/test (fetch) origin //nas_name/git/test (push) Enumerating objects: 3, done. Counting objects: 100% (3/3), done. Writing objects: 100% (3/3), 211 bytes | 211.00 KiB/s, done. Total 3 (delta 0), reused 0 (delta 0), pack-reused 0 To //nas_name/git/test * [new branch] master -> master Branch 'master' set up to track remote branch 'master' from 'origin'.
cloneしてみる
$ mkdir tmp $ cd tmp $ git clone //nas_name/git/test Cloning into 'test'... done. $ ls test/ $ ls test test.txt

remote URLを変更する

現在のremote URLを確認する
$ git remote -v origin http://mainpc:8080/git/mike/SimpleComm.git (fetch) origin http://mainpc:8080/git/mike/SimpleComm.git (push)
remote URLを変更する
$ git remote set-url origin https://github.com/githubusername/reponame.git
変更したremote URLを確認する
$ git remote -v origin https://github.com/githubusername/reponame.git (fetch) origin https://github.com/githubusername/reponame.git (push)
pushする。が、失敗。
masterじゃなくてmainにしないといけない。
$ git push -u origin master error: src refspec master does not match any error: failed to push some refs to 'https://github.com/githubusername/reponame.git'
pushする
$ git push -u origin main Enumerating objects: 145, done. Counting objects: 100% (145/145), done. Delta compression using up to 8 threads Compressing objects: 100% (138/138), done. Writing objects: 100% (145/145), 5.22 MiB | 2.34 MiB/s, done. Total 145 (delta 83), reused 0 (delta 0), pack-reused 0 remote: Resolving deltas: 100% (83/83), done. To https://github.com/githubusername/reponame.git * [new branch] main -> main Branch 'main' set up to track remote branch 'main' from 'origin'.

パーミッションを無視する

無視する設定
git config core.filemode false

確認
git config -l | grep filemode

【Git】ファイルパーミッションの変更(chmod)を無視する方法

ワークフロー


■ベアリポジトリ作成
リポジトリを作りたい場所で以下のコマンドを打つ
フォルダも作ってくれる。
git init --bare sample.git
■クローン
リポジトリのクローン作成。作成されたフォルダは、.gitが付かない
git clone //servername/sample.git
■ブランチの一覧
git branch -a
■ブランチの作成
git checkout -b ブランチ名
■ブランチの切り替え
git checkout ブランチ名
もしこの時'detached HEAD'みたいな表示が出た場合
ブランチを作成する
git switch -c 新ブランチ名
■push
git push
■pushおこられ
この後pushする時おこられる
git push fatal: The current branch emulator has no upstream branch. To push the current branch and set the remote as upstream, use git push --set-upstream origin ブランチ名
言われる通りやる。ブランチ名まで全てコピペで良い。
git push --set-upstream origin ブランチ名
次回からはgit pushだけでいける。

■pull
git pull
■pullおこられ1
pushでおこられたときは、まぁpullもおこられる。
git pull There is no tracking information for the current branch. Please specify which branch you want to merge with. See git-pull(1) for details. git pull <remote> <branch> If you wish to set tracking information for this branch you can do so with: git branch --set-upstream-to=origin/<branch> Emulator
だけブランチ名指定して実行する
git branch --set-upstream-to=origin/Emulator Emulator Branch 'Emulator' set up to track remote branch 'Emulator' from 'origin'.
メッセージ翻訳「ブランチ 'Emulator' は 'origin' からのリモートブランチ 'Emulator' を追跡するように設定されました。」

■git pullおこられ2

git checkout


■日常の運用
git fetch 最新版をリモートから取得。pullすればfetch+merge出来るが、いざというとき大変らしい git merge origin/master リモートから取得した最新にマージする。 git checkout -b develop ブランチ作成。この場合はmasterからのブランチになる。作業途中でもブランチ作成可能 vi hello.c ファイル編集 git diff ファイルの変更確認 git add hello.c ここらはTortoiseGitでやっても良い git commit -a -m 'hello -> goodbye' TortoiseGitなら日本語入力とか改行とか楽 git checkout master git merge dev git push

使う(使いそうな)コマンド


基本git statusステータス表示。何すれば良いか教えてくれる。結構便利。
リポジトリgit initリポジトリの作成(カレントディレクトリをリポジトリにする)
リポジトリgit init --bare %reposリポジトリの作成%reposというリポジトリ(フォルダ)を作成する。
リポジトリgit clone %repository%repositoryを複製
この時//machinaname/tmp/repo.git みたいに書くと共有リポジトリを指定可能。
リポジトリgit clone --bare %repository %directory共有用リポジトリを作成。%repositoryを%direcotoryへ複製
--bareを付けないと共有出来ない
ブランチgit branch -aすべてのブランチを表示
ブランチgit checkout -b %branch%branchを作成して切り替え
この時ローカルのファイルは変更されない★この挙動がポイント
ブランチgit checkout %branch%branchへ切り替え
ブランチgit checkout %tagname%タグへ切り替え
★この時'detached HEAD'状態になり、全てのブランチから独立した状態になる。
'git checkout -b newbranch'でブランチを作り、後でマージする。
ブランチgit branch -d %branch%branchを削除する
ステージgit add %fileステージに追加
ステージgit rm --cached %fileステージから削除
ステージgit rm %fileファイルを削除し、削除情報をステージに追加
マージgit merge --no-ff %branch%branchをHEADへマージする
--no-ffを付けないと後でマージの追跡が出来なくなるので★必ず★付ける。
リモートリポジトリgit push
リモートリポジトリgit fetch
リモートリポジトリgit merge
リモートリポジトリgit pull %remote %branch
git pull origin %branch
リモートリポジトリをアップデートする。originはclone時自動で付くらしい
%branch省略するとmasterになる?のか?
リモートリポジトリgit remote -vリモートの詳細
リストアgit restore .カレントディレクトリの変更を戻す https://tracpath.com/docs/git-restore/
リセットgit reset --hard HEAD変更を全て破棄してチェックアウトした状態に戻す
git reset についてもまとめてみる - murankの日記
コミットgit commit -aエディタが起動して、コミットメッセージを編集出来る
コミットgit commit -a -m 'message'コミットメッセージを指定してコミット
コミットまとめgit log --oneline --decorateコミットログを表示
コミットまとめgit rebase -i HEAD~2HEAD含めて2個のコミットをまとめる。
この後表示されるエディタで削除したいメッセージをfにする。
タグgit tagタグ一覧
タグgit tag -a %tagname -m '%tagtext'今のコミットに対してタグをつける
掃除git clean -fX -dignoreファイルのみ削除。フォルダも削除。
掃除git clean -fx -dトラッキングしているファイル以外全て削除。フォルダも削除。

ブックマーク(最近)

サルでもわかるGit入門

Git初心者が見るべきサイトまとめ

git resetについてまとめてみる

A successful Git branching model を翻訳しました
http://keijinsonyaban.blogspot.jp/2010/10/successful-git-branching-model.html

http://d.hatena.ne.jp/sasaplus1/20120520/1337490325

ヽ( ・∀・)ノくまくまー Rails勉強会@東京第33回
上記から引用
Gitコマンドの機能比較
操作 clone pull fetch init checkout
ダウンロード
展開
ディレクトリ作成

Gitとアーカイブモデルの対比
操作 Git(初心者) Git(中級者) アーカイブファイル
ディレクトリ作成 git clone... git init mkdir arc
ダウンロード git fetch wget -O arc/xxx.tar.gz http://...
展開 git checkout tar zxvf arc/xxx.tar.gz
引用ここまで

git remote add origin %repositoryリモートリポジトリに名前を付ける。この場合はorigin

アリスとボブのサーバー、git pushをちゃんと理解したい!

アリスがチャレンジなコードを書く時、git branchをちゃんと理解したい!

tagの使い方
http://d.hatena.ne.jp/kanonji/20110304/1299211488

勉強

A Visual Git Reference Gitでわかりづらい所を可視化して説明。わかりやすい。
Learn.GitHub - Rebasing これも可視化
Gitを使いこなすための20のコマンド
Git Reference リファレンス。これもわかりやすい。
Git と GitHub を体験しながら身につける勉強会行ってきた
【翻訳】Gitをボトムアップから理解する むずかしー
私の使うGitコマンドまとめ

日本語問題

Release 1.7.9.0 Released: 2012-05-05 からUTF-8対応したようです。
http://code.google.com/p/tortoisegit/wiki/ReleaseNotes#Release_1.7.9.0

2012-02-11 msysGit(Git for Windows)がいよいよ公式に UTF-8 をサポート!

Cygwinで日本語問題を回避
SubversionからGitへ移行しようとして日本語ファイル名に困ったことある方に

イメージ図

こんな風?

Pro Git 日本語版「図1-6. 作業ディレクトリ、ステージング・エリア、Gitディレクトリ」
http://progit.org/book/ja/ch1-3.html
を参考にしました。

A Visual Git Reference そうそう、こういう図が欲しかった。

便利な.gitignore

リポジトリに入れたくないファイルを書いておく。

Git Guiを使う

コマンドラインも良いけど、GUIもね。
「コミット予定に入っていない項目」からファイル選択。「コミット」→「コミット予定する(Ctrl+T)」

msysgitをコマンドラインで使う


git statusすれば、コマンドの例が出てくるのでとりあえずgit statusして、そのメッセージを見るのも有効。

一番最初

git init

現状の確認

git status

ステージ

ステージに追加

git add *.c

ステージから削除

addの取り消し
git rm --cached hello.c

ファイルの削除

ディスク上からファイルを削除し、ファイルの削除をステージング
git rm hello.c

コミット

通常のコミット

インストール直後は文句いわれるかも。その時は指示に従って設定をする。
Author identity unknown *** Please tell me who you are. Run git config --global user.email "you@example.com" git config --global user.name "Your Name" to set your account's default identity. Omit --global to set the identity only in this repository. fatal: unable to auto-detect email address (got 'root@op1.(none)')

git commit -m 'initial project version'
-mコマンドラインでコミットメッセージ指定

自動ステージングコミット

git commit -a -m 'added new file'
-aトラッキングしているファイルを自動でステージ(add)する。

コミットをまとめる


最初こんな風だとする。
$ git log --oneline --decorate 28247f5 (HEAD, master) mata wasureta 78a0314 wasureta 399216f initial import
2個まとめる。
git rebase -i HEAD~2
エディタが起動し、こんな風に表示されたりする。
pick 78a0314 wasureta pick 28247f5 mata wasureta
まとめ方その1(squash)
こうして保存・終了すると、エディタが開いてコミットメッセージ編集出来る
pick 78a0314 wasureta s 28247f5 mata wasureta
まとめ方その2(fixup)
こうして保存・終了すると、コミットメッセージはpickのメッセージになる。(エディタ起動しない)
pick 78a0314 wasureta f 28247f5 mata wasureta
fixupした後のログ
$ git log --decorate --oneline e285904 (HEAD, master) wasureta 399216f initial import
3個まとめる。
git rebase -i HEAD~3
こうすると、こんなかんじにエディタ表示されるので
pick xx pick xx pick xx
下の2個をsにして保存終了。
pick xx s xx s xx
もう一回エディタが表示されるので、そこでまとめたコミットログを書く。

失敗した時

git rebase --abort

タグ


タグ一覧

git tag

タグ付け

git tag -a rev1 -m 'revision 1'

状態確認

コミット後はこんな感じ
$ git status # On branch master nothing to commit (working directory clean)

ログ

git log git log --oneline --decorate
--oneline一行表示
--decorateこれを付けないとタグ表示しない...

分岐

ブランチの作成と切り替え

branchはブランチの作成
checkoutはブランチの切り替え(HEADの移動をする)
作業途中でもブランチは作成可能。作業途中のファイルは残る。

git checkout -b testing
↑はこれと同等
git branch testing git checkout testing

ブランチ切り替え

git branch testing

ブランチの削除

git branch -d testing

ブランチの一覧

git branch

取り消し


ワーキングツリーの変更取り消し

git checkout -- <file>

ログの変更

git commit --amend

共有リポジトリ


cloneする際'--bare'して、xyz.gitという風にしとかないとpush出来ないっぽい。
pullは出来る。
アリスとボブのサーバー、git pushをちゃんと理解したい!

共有リポジトリの作成
git clone --bare /c/data/testproject /c/shared/repos/project.git
共有リポジトリを複製
git clone /c/shared/repos/project.git

push

pushできない
pushしようと思ったらこんな感じのメッセージが!
receive.denyCurrentBranch
git pushできない - 橋本詳解

clone元でこうする。
git config --add receive.denyCurrentBranch ignore

リポジトリをまとめる

testというリポジトリが、手元と別のマシン上にある場合
cd test git remote add repo2 //server/folder/test git fetch repo2 git merge repo2/master
Git で複数のリポジトリをまとめたり、逆に切り出したりする

インストール


2012-06-05インストール


TortoiseGIT + msysgitの組み合わせ。
ついでにTortoiseSVNも入れときました。

Windows7 64bit
  1. TortoiseSVN-1.7.7.22907-x64-svn-1.7.5.msi
  2. msysgit(Git for Windows) Git-1.7.10-preview20120409.msi
  3. TortoiseGit TortoiseGit-1.7.10.0-64bit.msi

WindowsXP 32bit
  1. TortoiseSVN-1.7.7.22907-win32-svn-1.7.5.msi
  2. msysgit(Git for Windows) Git-1.7.10-preview20120409.msi
  3. TortoiseGit TortoiseGit-1.7.10.0-32bit.msi

msysgitは、GUIとBASH入れたほうが良い。便利です。
コミットはas-isにしました。Windowsだからと言ってCR,LFのみとは限らないので。

エディタの設定
git config --global core.editor "'C:/tools/bin/k2e/K2Editor.exe' //on"
エディタ設定で起動時にUTF-8N(BOM)無しにしている。
BOMが付くと、以下みたいなメッセージになる。
<U+FEFF>日本語メッセージテスト
ユーザーの設定
git config --global user.email "you@example.com" git config --global user.name "Your Name"

インストールGitのUTF-8対応以前

WindowsXP
Git/一人で使ってみる(msysgit編) こちらを参考にしつつ。
nkf,lessを導入してから、profileに以下を追記。nkfに-W付けないと表示出来なかった。
export GIT_PAGER="nkf -W -s | less"

サーバー


GitBucket

凄く簡単。
起動したらhttp経由で、rootログインして設定するだけ。

設定やリポジトリは下記フォルダに入る。
c:\users\{username}\.gitbucket


とりあえず運用中。

msysgitでサーバー

あるバージョンからgitプロトコルのpushに不具合あって、現状はできない?(2017-03-04)

参考 http://thinking-megane.blogspot.jp/2012/07/windowsgit.html
参考 http://d.hatena.ne.jp/madknight+Veritas/20121106

リポジトリを作成
md C:\Git\repos\sample.git cd C:\Git\repos\sample.git git init --bare
もしくは、こうするとsample.gitフォルダを作りつつ、リポジトリを作ってくれる。
git init --bare sample.git
こんな感じでバッチファイル作成
"C:\Program Files (x86)\Git\cmd\git.cmd" daemon --verbose --export-all --enable=receive-pack --base-path=C:/Git/repos
リモートからはこんな感じで
git ls-remote git://サーバ名/sample.git

Mac OSXにインストール

http://code.google.com/p/git-osx-installer ここからダウンロード
今回は「git-1.8.3.2-intel-universal-snow-leopard.dmg」をダウンロード
開くと、pkgが有るので、それを開くとGUIインストーラが起動するので、それでインストール。

http://tukaikta.blog135.fc2.com/blog-entry-206.html

launchctl load com.git-run-daemon-run.plist launchctl list | grep git launchctl unload com.git-run-daemon-run.plist
で、結局サーバー動作うまくいかなかったので、やめた...orz

Home New Help Edit
2024-09-26 16:32:26 32400