git
*Git memo 2011-05-28 [[index]] Gitを使ってみようかと思う。 Windows + MsysGit + TortoiseGit #contents **originとmasterとHEAD origin リポジトリの場所(URL)の別名 master(main) ブランチの名前。とある騒動でmainへと改名された。 HEAD 最新の変更点 [[Git - originとmasterとは何か(初心者向け)>https://qiita.com/seri1234/items/e651b3e108a695a92809]] [[GitのHEADとは?origin/HEADとの違いは?初心者向けに画像でやさしく解説!>https://nebikatsu.com/6367.html/]] **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を見てみた。 --no-edit付けると、エディタ開かずにマージできる(メッセージは自動生成) >git merge remotes/origin/main --no-edit &simg(branch1.png); &simg(branch2.png); **ミラーリポジトリ リポジトリのミラーしたベアクローンを作成 >git clone --mirror //nasorg/folder/test.git リポジトリの同期 >git fetch -p origin >git push --mirror コンフリクトはベアじゃないリポジトリで行う。 &img(mirror1.svg); &img(mirror2.svg); &img(mirror3.svg); 参考 [[リポジトリを複製する>https://docs.github.com/ja/repositories/creating-and-managing-repositories/duplicating-a-repository]] **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)を無視する方法>https://qiita.com/_Keitaro_/items/edf962d00770029cf4ba]] **ワークフロー ■ベアリポジトリ作成 リポジトリを作りたい場所で以下のコマンドを打つ フォルダも作ってくれる。 >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
> >If you wish to set tracking information for this branch you can do so with: > > git branch --set-upstream-to=origin/
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を複製&br;この時//machinaname/tmp/repo.git みたいに書くと共有リポジトリを指定可能。 |リポジトリ|git clone --bare %repository %directory|共有用リポジトリを作成。%repositoryを%direcotoryへ複製&br;--bareを付けないと共有出来ない |ブランチ|git branch -a|すべてのブランチを表示 |ブランチ|git checkout -b %branch|%branchを作成して切り替え&br;この時ローカルのファイルは変更されない★この挙動がポイント |ブランチ|git checkout %branch|%branchへ切り替え |ブランチ|git checkout %tagname|%タグへ切り替え&br;★この時'detached HEAD'状態になり、全てのブランチから独立した状態になる。&br;'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へマージする&br;--no-ffを付けないと後でマージの追跡が出来なくなるので★必ず★付ける。 |リモートリポジトリ|git push |リモートリポジトリ|git fetch |リモートリポジトリ|git merge |リモートリポジトリ|git pull %remote %branch&br;git pull origin %branch|リモートリポジトリをアップデートする。originはclone時自動で付くらしい&br;%branch省略するとmasterになる?のか? |リモートリポジトリ|git remote -v|リモートの詳細 |リストア|git restore .|カレントディレクトリの変更を戻す [[https://tracpath.com/docs/git-restore/]] |リセット|git reset --hard HEAD|変更を全て破棄してチェックアウトした状態に戻す&br;[[git reset についてもまとめてみる - murankの日記>http://d.hatena.ne.jp/murank/20110327/1301224770]] |コミット|git commit -a|エディタが起動して、コミットメッセージを編集出来る |コミット|git commit -a -m 'message'|コミットメッセージを指定してコミット |コミットまとめ|git log --oneline --decorate|コミットログを表示 |コミットまとめ|git rebase -i HEAD~2|HEAD含めて2個のコミットをまとめる。&br;この後表示されるエディタで削除したいメッセージをfにする。 |タグ|git tag|タグ一覧 |タグ|git tag -a %tagname -m '%tagtext'|今のコミットに対してタグをつける |掃除|git clean -fX -d|ignoreファイルのみ削除。フォルダも削除。 |掃除|git clean -fx -d|トラッキングしているファイル以外全て削除。フォルダも削除。 **ブックマーク(最近) [[サルでもわかるGit入門>http://www.backlog.jp/git-guide/]] [[Git初心者が見るべきサイトまとめ>http://matome.naver.jp/odai/2136491451473222801]] [[git resetについてまとめてみる>http://d.hatena.ne.jp/murank/20110327/1301224770]] 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回>http://wota.jp/ac/?date=20080928%23p01]] 上記から引用 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をちゃんと理解したい!>http://d.hatena.ne.jp/zariganitosh/20080910/1221050855]] [[アリスがチャレンジなコードを書く時、git branchをちゃんと理解したい!>http://d.hatena.ne.jp/zariganitosh/20080912/1221260782]] tagの使い方 [[http://d.hatena.ne.jp/kanonji/20110304/1299211488]] **勉強 [[A Visual Git Reference>http://marklodato.github.com/visual-git-guide/index-en.html]] Gitでわかりづらい所を可視化して説明。わかりやすい。 [[Learn.GitHub - Rebasing>http://learn.github.com/p/rebasing.html]] これも可視化 [[Gitを使いこなすための20のコマンド>http://sourceforge.jp/magazine/09/03/16/0831212]] [[Git Reference>http://gitref.org/index.html]] リファレンス。これもわかりやすい。 [[Git と GitHub を体験しながら身につける勉強会行ってきた>http://d.hatena.ne.jp/bleis-tift/20100922/1285140344]] [[【翻訳】Gitをボトムアップから理解する >http://keijinsonyaban.blogspot.com/2011/05/git.html]] むずかしー [[私の使うGitコマンドまとめ>http://d.hatena.ne.jp/naokirin/20111201/1322576109]] **日本語問題 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 をサポート!>http://d.hatena.ne.jp/nitoyon/20120221/msysgit_utf8]] Cygwinで日本語問題を回避 [[SubversionからGitへ移行しようとして日本語ファイル名に困ったことある方に>http://yumewaza.yumemi.co.jp/2010/08/git-svn-utf8-filename.html]] **イメージ図 こんな風? &img(git_img.png); Pro Git 日本語版「図1-6. 作業ディレクトリ、ステージング・エリア、Gitディレクトリ」 [[http://progit.org/book/ja/ch1-3.html]] を参考にしました。 [[A Visual Git Reference>http://marklodato.github.com/visual-git-guide/index-en.html]] そうそう、こういう図が欲しかった。 **便利な.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 --
**ログの変更 >git commit --amend **共有リポジトリ cloneする際'--bare'して、xyz.gitという風にしとかないとpush出来ないっぽい。 pullは出来る。 [[アリスとボブのサーバー、git pushをちゃんと理解したい!>http://d.hatena.ne.jp/zariganitosh/20080910/1221050855]] 共有リポジトリの作成 > 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できない - 橋本詳解>http://d.hatena.ne.jp/shokai/20101105/1288968082]] 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 で複数のリポジトリをまとめたり、逆に切り出したりする>http://qiita.com/uasi/items/77d41698630fef012f82]] **インストール ***2012-06-05インストール TortoiseGIT + msysgitの組み合わせ。 ついでにTortoiseSVNも入れときました。 Windows7 64bit +TortoiseSVN-1.7.7.22907-x64-svn-1.7.5.msi +msysgit(Git for Windows) Git-1.7.10-preview20120409.msi +TortoiseGit TortoiseGit-1.7.10.0-64bit.msi WindowsXP 32bit +TortoiseSVN-1.7.7.22907-win32-svn-1.7.5.msi +msysgit(Git for Windows) Git-1.7.10-preview20120409.msi +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編)>http://yakinikunotare.boo.jp/orebase/index.php?Git%2F%B0%EC%BF%CD%A4%C7%BB%C8%A4%C3%A4%C6%A4%DF%A4%EB%A1%CAmsysgit%CA%D4%A1%CB#h2_content_1_8]] こちらを参考にしつつ。 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
2024-11-21 19:25:58 32400