20211203のGitに関する記事は4件です。

git commitするだけでコミットメッセージの自動追加と自動プッシュ

はじめに git commit -am "コミットメッセージ" をよく使うのですが、コミットメッセージに自動で今の時間が追加されて、その後にpushまでしてくれたら嬉しいですよね。 gitのhooksでそれを実現しました。なお、このスクリプトはBSD版シェルで動作します。 作ったもの git commit -am "コミットメッセージ" を実行すると、 2021-12-04-00:00:00 コミットメッセージ というコミットメッセージでコミットされる。同時にgit pushが実行される。 やり方 1. .git/hooks/にprepare-commit-msgを作る。 2. prepare-commit-messageを次のように編集する。 prepare-commit-msg #!/bin/sh COMMIT_MSG_FILE=$1 echo "prepare-commit-msg" DATE=$(date '+%Y-%m-%d %H:%M:%S') sed -i '' -e "1i\\ $DATE" $COMMIT_MSG_FILE cat $COMMIT_MSG_FILE これはコミットメッセージの1行目に現在時刻を挿入するスクリプトです。OSXのBSD版shellでsedコマンドを正常に動かすためにsedの途中で改行を入れています。 ここでは確認のために内容を出力しています。 3. .git/hooks/にpost-commitを作る。 4. post-commitを次のように編集する。 post-commit #!/bin/sh echo "hook post-commit" git push 補足 初回pushでの--set-upstreamを自動で設定するために、 git config push.default current を予め実行しておくとより使いやすいと思います。 また、hooksの実行を停止するオプションはありません。pre-commitとcommit-messageフックは--no-verifyオプションでオフにできますが、post-commitとprepare-commit-messageには効かないからです。 これは、この2つのフックの想定されている使い道がこのような自動化でないからだと考えられます(参考:Git Hooks)。使用する際は、個人リポジトリで使うのが賢明かもしれません。
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Gitコマンド 備忘録

はじめに Gitのコマンドをすぐに忘れるのでメモしておきます。 自分用備忘録です。 ・リポジトリの作成 git init ・共有対象の指定 git add [ファイル名] # カレントディレクトリ以下の、すべてのファイル(変更があったもの)をaddする場合は git add . ・addされたファイルのコミット git commit -m "メッセージ" ・コミット履歴の確認 git log ・コミットメッセージのみ確認 git log --oneline ・指定の数だけコミット履歴の確認(最後に数字を指定) git log -1 ・差分の表示 git diff 今後編集して追加していきます。
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

macの再起動後、SourceTreeのgit操作でエラーが発生する

 困ったこと macのSourceTreeにて、以前成功していたgit操作が再起動後は失敗するようになります。 その際に以下のエラーメッセージが出力されます。 Please make sure you have the correct access rights and the repository exists. git@github.com: Permission denied (publickey). fatal: Could not read from remote repository. OS:macOS Big Sur SourceTree:4.1.3 SSH鍵はgithubに登録済み SourceTreeとgithubのアカウント連携も済 リモートリポジトリも登録済 ターミナル上でgitコマンドを使った接続は成功する 原因 SSH鍵にパスフレーズが設定されている場合に発生するようです。 詳しくは以下記事にて解説されております。原因特定の際に大変助かりました。 https://qiita.com/yuki153/items/0ad5cb02faf3ecdcf903 対処法 上記記事の中でも解説頂いておりますが、.ssh配下のconfigファイルに以下の1行を追加する事で解消しました。 UseKeychain yes これによって、再起動後でもSourceTreeにて問題なく実行できるようになるはずです。 誤り等あればご指摘頂けますと幸いです。
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Gitでリポジトリからファイルを完全に消す(何番煎じ)

tl; dr こっちよめ https://kubotti.hatenablog.com/entry/2017/02/24/155648 手順 1 確認用のスクリプトをダウンロードする https://confluence.atlassian.com/bitbucket/files/321848291/321979854/1/1360604134990/git_find_big.sh git_find_big.sh #!/bin/bash #set -x # Shows you the largest objects in your repo's pack file. # Written for osx. # # @see http://stubbisms.wordpress.com/2009/07/10/git-script-to-show-largest-pack-objects-and-trim-your-waist-line/ # @author Antony Stubbs # set the internal field spereator to line break, so that we can iterate easily over the verify-pack output IFS=$'\n'; # list all objects including their size, sort by size, take top 10 objects=`git verify-pack -v .git/objects/pack/pack-*.idx | grep -v chain | sort -k3nr | head` echo "All sizes are in kB's. The pack column is the size of the object, compressed, inside the pack file." output="size,pack,SHA,location" for y in $objects do # extract the size in bytes size=$((`echo $y | cut -f 5 -d ' '`/1024)) # extract the compressed size in bytes compressedSize=$((`echo $y | cut -f 6 -d ' '`/1024)) # extract the SHA sha=`echo $y | cut -f 1 -d ' '` # find the objects location in the repository tree other=`git rev-list --all --objects | grep $sha` #lineBreak=`echo -e "\n"` output="${output}\n${size},${compressedSize},${other}" done echo -e $output | column -t -s ', ' これで本当に消えたかどうかの確認ができます 2 全てのコミットやブランチ、タグから特定のファイルを消して書き換える git filter-branch -f --index-filter 'git rm --ignore-unmatch path/to/target/file/or/dir' --tag-name-filter 'cat' -- --all ネットで探すと --tag-name-filter 'cat' これが抜けてるものが結構引っかかります。これがないとタグを書き換えてくれません。 3 先ほどの操作で生成されたバックアップを消す git for-each-ref --format="%(refname)" refs/original/ | xargs -n 1 git update-ref -d 消さないと昔のコミットをここからずっと参照され続けてしまいます 4 不要な操作履歴を消す git reflog expire --expire=now --all (実はあんまりよく分かっていない) 5 これで不要なファイルへの参照が全て失われたはずなのでGCをかけて完全に消す git gc --prune=now 単に使われなくなったファイルを消すだけなら --aggressive はおそらく不要です。 6 再確認 ./git_find_big.sh 以上 以上
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む