- 投稿日:2019-07-04T21:30:11+09:00
BFG Repo-Cleanerを使ってGitリポジトリを軽くした件
要らないデータの大きさを簡単に確認する方法
git clone https://github.com/daijinload/test.git cd test wget https://confluence.atlassian.com/bitbucket/files/321848291/321979854/1/1360604134990/git_find_big.sh chmod 755 git_find_big.sh ./git_find_big.sh中に入ってダウンロードしたシェルスクリプトを実行するだけ。
bfgを使ってファイルを削除する方法
※注)必ずバックアップを取ってから実行してください。
wget https://repo1.maven.org/maven2/com/madgag/bfg/1.13.0/bfg-1.13.0.jar git clone --mirror https://github.com/daijinload/test.git du -hs test.git/objects java -jar bfg-1.13.0.jar -D 'bigfile1' test.git java -jar bfg-1.13.0.jar -D 'bigfile2' test.git cd test.git git reflog expire --expire=now --all && git gc --prune=now --aggressive git push以上で、Gitのリポジトリが軽くなります。
先頭コミットのハッシュ値が変わってなかったですが、リリースしたときのハッシュ値を保存しているような現場では、調べてから実行したほうが良いと思います。
また、念のため作業者全員のローカルのGitをcloneしなおしたほうが良いと思います。
とりあえず、リポジトリを軽くしたい人は、ぜひ!!
参考URL
// git_find_big.shの説明
https://confluence.atlassian.com/bitbucket/maintaining-a-git-repository-321848291.html// bfg.jar
https://rtyley.github.io/bfg-repo-cleaner/
- 投稿日:2019-07-04T21:08:19+09:00
コミットメッセージにPrefixつけるようにするとコミット粒度が細かくなっていい感じ。
いつだったか、Twitterでgitのコミットメッセージにプレフィクスをつけるって話をみかけて、自分でもやってみました。
Prefixの付け方もいろいろあるようなんですが、自分は下記2つのミックスでやってます。
だいたい使ってるのは下記です。
- add: ファイルの追加や機能の追加
- fix: バグ修正
- change: 機能、仕様の変更
- refactor: リファクタリング
- disable: 無効化。だいたいはコメントアウト
- remove:削除。コメントアウトしたコードの削除とかファイル削除とか
- style: コードフォーマットの変更
- comment: コメント追加・修正
使うか微妙だなぁってのは下記。
- revert: 変更とりやめ。SourceTreeで元にもどすと自動でコミットメッセージはいるんで自分では入れなさそう。
- test: テストだけを変更したときに使うかもなぁって思ったんですが、結局使わずに、テストコードをどうしたのかをfix, addなどで書いてます。
他にもオープンソースプロジェクトなどでPrefixのルール決めてるケースがあったら参考にしてみたいので知りたいところです。
Prefixつけると、ごちゃまぜコミットが減ります。
さて実際にPrefixつけたコミットメッセージをつけるようになると、いろんなコミットがごちゃまぜにならないようにコミット粒度を細かくわけるようになってきます。
機能変更(change)してるときに不具合みつけて不具合修正(fix)までした1つのコミットにならないように、わけたりとかですね。
細かい粒度でコミットしてると、あとで「あれ?なんでこのコードこうなってるんだ?」ってときにコミットメッセージからその時どう考えて今のコードになってるのかわかったりして便利です。(逆にひとまとめでドンッとコミットしてると、どういう経緯で今のコードになってるのかわからないことが多いです)
- 投稿日:2019-07-04T17:03:33+09:00
【git】git diffの機能使ってファイルの比較を行う
はじめに
テスト段階で,開発用ブランチの出力結果と自分の作業ブランチの出力結果の比較をしなきゃいけない感じになったので,gitにちょうどいい機能あったなあと思って
git diffで比較して差分を検証してみることにしました.手順
- なんかディレクトリ適当に作る
- 比較したいファイルの片方を
git add .してgit commit- 同じファイルの中身開いて比較したいもう片方の中身をペーストして保存
git diffで差分が出てきます.例
$ mkdir seeDiff $ cd seeDiff $ vi output.txtoutput.txtMy Name is Shuto$ git init $ git add . $ git commit -m "my branch"$ vi output.txtoutput.txtMy Name is Arafat$ git diffといった感じで差分だけ表示されます
赤が消えて,緑が追加されましたよー
ってこと
案外この機能がすごく便利で使い所多い気がする
- 投稿日:2019-07-04T15:38:23+09:00
[Git]merge(合流)という名前のせいで、どっちからどっちへの作業なのかが分かりにくい件
はじめに
ペーペーながらgitを使っていて、
pull、push、commit、add、checkout、branchなんかは見慣れてきたけど、最近mergeをする機会が出てきました。
やや混乱したので、備忘録を兼ねてまとめておきます。mergeはどっちからどっち?
mergeの意味を調べたら、合流とか合併という意味らしい。
これが、ややこしく感じた根源かと思ういます。mergeはソースを合わせるということですが、どっちからどっちに?ってところがややこしい。
個人的に腑に落ちた表現は、次です。古いブランチが、新しいブランチの情報を取りに行く
たとえば、
AブランチとBブランチがあって、Aが最新だとする。
今回はBブランチが古いので、新しいAブランチに合わせたいという場合についてです。この場合、結論からいうと、BブランチがAブランチの情報を取りに行く、と考えると分かりやすいです。
こう考えたことで、
- Bブランチが主体となって作業する
- そのため、Bブランチにcheckoutしておく必要がある
- また、対象がAブランチなので記述には
git merge Aブランチとなるこれらが腑に落ちました。
さいごに
今日はものすごく簡単な内容でしたが、なぜか僕は混乱したので共有させてもらいます。
最後まで、ありがとうございました。
- 投稿日:2019-07-04T13:34:54+09:00
【備忘録】git remote add originできない時
あるリポジトリでgit管理を始める時、下記の手順に従ってコマンドを入力していくと、
$ git remote add origin https://github.com/katsuomi/****.git $ git push -u origin master remote: Invalid username or password. fatal: Authentication failed for 'https://github.com/katsuomi/*****.git/'となってしまう場合、
git remote add origin https://{gitのID名}@github.com/katsuomi/.git**
とすると、うまくいきました。$ git remote rm origin $ git remote add origin https://katsuomi@github.com/katsuomi/*****.git $ git push -u origin master以上。
- 投稿日:2019-07-04T12:22:00+09:00
gitコミットだけ取り消し(ファイルの変更分は消えない)
自分メモ
変更は残して、コミットだけ消したい場合
ex.)コメント変えたい時とか、コミット後に1行だけ修正した時とかgit reset --soft HEAD^
- 投稿日:2019-07-04T11:09:18+09:00
Gitでstashする方法
- 環境
- CentOS Linux release 7.6.1810 (Core)
- git version 1.8.3.1
- xfc4-terminal 0.8.7.4
ユーザを設定していない場合は設定する
ユーザを設定しないままstashすると怒られるので設定していない場合は設定する。
# ユーザを設定しないままstashすると怒られる $ git stash *** 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: empty ident name (for <ponsuke@12345abcdefg.(none)>) not allowed Cannot save the current index state # そういえばグローバルの.gitconfigはまだなかった $ find ~ -type f | grep gitconfig $ # コマンドで設定する $ git config --global user.email "{メールアドレス}" $ git config --global user.name "{ユーザ名}" # グローバルの.gitconfigができる $ find ~ -type f | grep gitconfig /home/ponsuke/.gitconfig名前を付けて
stashする# お名前をつけてstashする $ git stash save stash-name Saved working directory and index state On branch-c: stash-name HEAD is now at bf54b9a # stashできたか確認する $ git stash list stash@{0}: On branch-c: stash-name # 一応ローカルの変更がstashされてなくなったか確認する $ git diff HEAD $
stashを適用する参考
- 投稿日:2019-07-04T08:21:15+09:00
Git初心者から中級者 ブランチ活用編
目的
業務効率化
ブランチの削除する方法
git branch -D hogehoge過去の履歴を参照する方法
git reflog履歴から復元する方法
git branch hogenosekai HEAD@{0}ブランチの確認
git branch --allブランチ同士の差分確認
git diff master developブランチAの方がBより古い扱いで差分が表示される
参考
https://www.google.com/amp/s/www.genius-web.co.jp/blog/cat-123/git-branch-reflog-rescue.html/amp
- 投稿日:2019-07-04T01:53:02+09:00
Gitの日付表示を日本式(yyyy-mm-dd)にしたい Mon Apr とか言われても直感的じゃない
git config --global log.date iso-local実行例
Dateのところが変わっている。
before
$git log -n 1 commit 56ce511e63b242f9ee94169fbdkgb0849f45f7a0 (HEAD) Author: shirofune9876 <shirofune9876@gmail.com> Date: Mon Apr 03 00:05:20 2019 +0900after
$git log -n 1 commit 56ce511e63b242f9ee94169fbdkgb0849f45f7a0 (HEAD) Author: shirofune9876 <shirofune9876@gmail.com> Date: 2019-04-03 00:05:20 +0900特に、pretty=formatしたときに気持ち良い
$git log --pretty=format:"%ad" -n 5 2019-04-27 00:05:20 +0900 2019-04-23 00:02:50 +0900 2019-04-17 22:45:34 +0900 2019-04-17 20:44:09 +0900 2019-04-17 10:20:45 +0900
- 投稿日:2019-07-04T01:15:12+09:00
git checkout とか git push のときに、ブランチ名をコピーするのが面倒なとき
ホームディレクトリ配下の
.gitconfigに以下の設定を書いておくと、git jumpとかgit bcpと打ち込むだけで、移動したり、ブランチ名をコピーできます。
ただし、pecoコマンドが入っているのでインストールはお忘れなきよう。~/.gitconfig[alias] jump = !git checkout $(git branch | sed 's/*//g' | sed 's/ //g' | peco) bcp = !git branch | peco | sed 's/*//g' | sed 's/ //g' | tr -d '\n' | pbcopyなお、!について、ですが、StackOverFlowによると、
If the alias expansion is prefixed with an exclamation point, it will be treated as a shell command.
!がついてると、shell commandとして見做すということだそうです。
(ついてないと→な感じのエラーが出ます。expansion of alias 'bcp' failed; 'git' is not a git command)。
- 投稿日:2019-07-04T00:02:17+09:00
VSCodeのRemote-SSHを使っている時、gitで同期ができない問題
VSCodeのRemote-SSHを使っている時、gitで同期ができない問題
問題
VSCode上のターミナルではgitでPullやPushはできるが、VSCode上からPushなどをおこおうとすると、
Git: Permission denied(publickey).
と表示されてしまう。
環境
ちなみに私の環境はgitlabにRaspberryPiに接続したWindowsマシンのVSCode上でgitを行おうとしていた。
原因
2019/07/03 現在、VSCode公式が近い問題を既存の問題としてあげていた
私の場合、SSHキーにパスフレーズは登録していないが、何をやってもVSCode上からはPullもPushもできなかったため、バグであると納得することにした。
追記:2019/07/04
と、思ったが、ターミナル上でssh-agentが起動しないことを不審に思い、
eval 'ssh-agent'とやったが、裏で実行されるが、その後の
ssh-add -lをするとssh-agentが起動されてない旨のメッセージがでてしまっていた。
解決策
そのssh-agentを起動する方法を
eval $(ssh-agent)とすると、しっかり起動できるようになり、
ssh-add [秘密鍵のパス]とすれば鍵が登録され、VSCodeからもgitが使えるようになる
ただ、実行する度にプロセスが増えてしまうため、
1つのプロセスを複数のBashから利用するためにhttp://kurokawh.blogspot.com/2012/07/linuxcygwin-ssh-agent.html
ここのサイトに書かれているコードを.bashrcに追記すると良いと思う。
ちなみに、.bashrcのコードは、ダブルクォーテーションが「“ ”」これになっているため、「" "」に直さないとエラーがでるので気を付けて欲しい。また、.bashrcに追記するコードの11行目と23行目の
ssh-addだが、これだけだと、
https://euske.github.io/openssh-jman/ssh-add.html
ここに書いてある通り、引数が無しのため、.ssh内の「id_rsa」,「id_dsa」,,,などなどの決まった名前のファイルしか読み込まないため、
秘密鍵のファイル名を変更している場合には、この11行目と23行目に引数としてファイルのパスを追記してあげると良いと思う。参考
.bashrc, .bash_logoutソースコード
http://kurokawh.blogspot.com/2012/07/linuxcygwin-ssh-agent.html
ssh-add
https://euske.github.io/openssh-jman/ssh-add.html


