20200115のGitに関する記事は7件です。

Creating Twin Repositories

banner.png

How to create a twins repository that includes both branch and tag. ??

Test environment

Grammar

$ git clone --mirror <org_repository>
$ cd org_repository
$ git remote -v
$ git remote set-url --push origin <new_repository>
$ git remote -v
$ git push --mirror <new_repository>

Demo

$ git clone https://github.com/sarojaba/awesome-devblog.git
Cloning into 'awesome-devblog'...
remote: Enumerating objects: 136, done.
remote: Counting objects: 100% (136/136), done.
remote: Compressing objects: 100% (88/88), done.
remote: Total 7219 (delta 81), reused 87 (delta 48), pack-reused 7083
Receiving objects: 100% (7219/7219), 2.59 MiB | 2.28 MiB/s, done.
Resolving deltas: 100% (4595/4595), done.
$ cd awesome-devblog
$ git remote -v
origin  https://github.com/sarojaba/awesome-devblog.git (fetch)
origin  https://github.com/sarojaba/awesome-devblog.git (push)

https://github.com/leechungkyu/new-awesome-devblog.git ✅ The repository must be created in advance.

$ git remote set-url --push origin https://github.com/leechungkyu/new-awesome-devblog.git
$ git remote -v
origin  https://github.com/sarojaba/awesome-devblog.git (fetch)
origin  https://github.com/leechungkyu/new-awesome-devblog.git (push)
$ git push --mirror https://github.com/leechungkyu/new-awesome-devblog.git
Delta compression using up to 2 threads.
Compressing objects: 100% (2586/2586), done.
Writing objects: 100% (7219/7219), 2.59 MiB | 1.52 MiB/s, done.
Total 7219 (delta 4595), reused 7219 (delta 4595)
remote: Resolving deltas: 100% (4595/4595), done.
To https://github.com/leechungkyu/new-awesome-devblog.git
 * [new branch]      master -> master
 * [new branch]      origin/HEAD -> origin/HEAD
 * [new branch]      origin/gh-pages -> origin/gh-pages
 * [new branch]      origin/master -> origin/master

? Result

git01.png

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

WSL上のUbuntu 18.04 LTSでgit cloneができない問題への対処

git cloneができない!(致命的)

ある日のこと。あるリポジトリをクローンしようとしたところ…

image.png

fatal: unable to access: gnutls_handshake() failed: Error in the push function.

と言われクローンができなくなった。
さてaptもカスペルスキーのせいで止められていたので、もしやと思い…
image.png
カスペルスキーの設定からHTTPSの443番ポートを無効化した。すると…
image.png
クローン成功。やったぜ。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

【個人用】Command LineとGitで使われる本当に基礎的なコマンドや単語のまとめ

初歩的なコマンドや意味について、自分でもすぐ見返せるように簡単にまとめてみました。

それぞれのコマンドについてはあまり深堀ってはいません。

Command Line

ようはキーボードの文字だけでコンピューターを操作するもの。コマンド=命令。
正確にはCUIでコマンドを実行したい時、ターミナルを立ち上げたら黒い画面が出てくるが、それのこと(または画面上の行のこと)を指すよう。

単語

  • ディレクトリ...フォルダのこと

  • ルートディレクトリ...ファイル階層の最初のディレクトリのこと。それまでのディレクトリは/で区切られる。

  • ホームディレクトリ...ユーザーがログインした際の初期位置のディレクトリ。で示される。

  • カレントディレクトリ...現在いるディレクトリのこと

コマンド

  • touch ファイル名 ファイルを作成する

  • cat ファイル名 ファイルの中身を確認する

  • mkdir ディレクトリ名 ディレクトリを作成する(make directoryの略)

  • cd ディレクトリ名 ディレクトリを移動する。親→子のみ(change directoryの略)

  • cd .. ディレクトリを移動する。子→親

  • cd ホームディレクトリへ移動する。

  • pwd カレントディレクトリ ~ ルートディレクトリまでを確認する(print working directoryの略)

  • ls カレントディレクトリの中身(ディレクトリやファイル)を確認する(listの略)

  • mv ディレクトリ名(ファイル名) ディレクトリ名 指定したディレクトリに移動させる。先に書いたほうが移動させたいもの。ファイルでもディレクトリでもOK。後に書いたほうが移動先のディレクトリ。(moveの略)

  • mv ディレクトリ名(ファイル名) 新規ディレクトリ名(ファイル名) ディレクトリ名またはファイル名を変更する。

※同じmvコマンドでも後に書く方に既存のディレクトリ名を書くと移動、存在しないディレクトリ名を書くと改名となる。
 

  • cp ファイル名 新規ファイル名 既存のファイルを新しいファイルにコピーする。

  • cp -r ディレクトリ名 新規ディレクトリ名 既存のディレクトリを新しいディレクトリにコピーする。

  • rm ファイル名 ファイルを削除する  

  • rm -r ディレクトリ名 ディレクトリごと削除する

Git

Gitはプログラムのソースコードなどの変更履歴を記録・追跡するための分散型バージョン管理システムである。
(Wikipediaより)

単語

  • ローカル...自分のPC

  • リモート...離れたところのPC

  • リポジトリ...ディレクトリやファイルの変更を管理する場所

  • コミット...記録すること

  • リモート...共有ファイルの置き場。Githubなど

  • プッシュ...リモートに送信 例)Githubにpushする

  • プル...リモートから受信 例)Githubからpullする

※タイトル通りあくまで自分でこう置き換えたら覚えやすいかな、という考えに基づいています。

コマンド

  • git init gitを使う時に初めに入力するもの(initializedの略。初期化の意味)

  • git add  対象となる共有したいファイル(ディレクトリ)の選択

  • git commit -m "メッセージ" 選択したファイルを記録する。

※メッセージはコミットメッセージといい、他の人が見ても分かるように分かりやすく書く。

ここまでで共有する準備が完了する。

  • git remote add origin URL リモートに登録するときのコマンド。originはリモート名といい、一般的にはoriginを使う。

  • git push origin master リモートに登録したあと、ファイルをアップロードするのに使うコマンド。アップロード=プッシュする

  • git pull origin master 同様にこのアップロードされたファイルをダウンロードするのに使うコマンド。ダウンロード=プルする

  • git status どのファイルを変更したかを確認する(変更があったファイルは赤で表示される。また、変更があったファイルのうち、addされたものは緑色で表示が変わる)

  • git diff 変更の内容を確認する(赤色が変更前のコード、緑色が変更後のコードとなる)

  • git log コミットメッセージ、コミットの履歴を確認する

  • git log -p コミットの履歴と変更内容を確認する

ざっとこんなところで。気が向いたら追加していきます。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Mergeしたプルリクを間違えてRevertしてしまった時の対応

結論

revertをrevertすれば良い

方法

ローカルのmasterブランチに移動

$ git checkout master

リモートリポジトリの内容を反映

$ git pull

ログを表示し、revertに振られたid?を確認

$ git log --oneline
7d146881 Revert "掲示板を作成"
42cdd131 掲示板を作成
.
.

revertをrevertする

$ git revert 7d146881

pushしてリモートに反映する

$ git push

参考

技術ブログっぽいなにか

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Git を普段から使い倒し 1ヶ月で余裕で使える状態にする

Git とは

分散型バージョン管理システムです


まあそんなことは

どうでもいいので、とりあえず使うところから始めましょう


前提

  • git をコマンドラインで使える状況であること
    • Windows であれば Git for Windows をインストール
    • Mac であれば brew install git (homebrew をインストールしている前提)

GUI で git を使うものは裏側で何の処理をやっているのか分からない不安な物が多い (分かろうとしていないなだけかもw)


適当に git のローカル議事録置き場を作る

例:議事録置き場

└── Documents
     └──  Minutes

Document/Minutes に移動し git 初期化

$ cd Documents/Minutes
$ git init

これで準備完了
よく使う確認コマンドとして、 git status git log git diff git show git grep があります。


アジェンダを残します

$ vim 20200115-SRE-cost-down-MTG.md

## アジェンダ

1. ほげ: 卜部 (10分)
2. ふが: 真一 (5分)
3. うぎゃー: 発表者未定 (10分)

作りかけなのですが、コミットします。

ファイルをステージに追加し、"アジェンダ作りかけ" という説明でコミットします。

$ git add 20200115-SRE-cost-down-MTG.md
$ git commit -m "アジェンダ作りかけ"

おや、修正が必要となりました

3. は決定ではないですが、 1. は決定で以下のように修正してほしいとのこと

$ vim 20200115-SRE-cost-down-MTG.md

## アジェンダ

1. ほげほげほげ: 卜部 (10分)
2. ふが: 真一 (5分)
3. うぎゃー: たろう (10分)

以下のようにコミットしましょう

$ git add -p
 # (1/1) Stage this hunk [y,n,q,a,d,s,e,?]?  のように 聞かれます。
 # 決定した 1 だけコミットしたいので s で応答し、分割する範囲をさらに絞ります。
 # 1 の差分の選択肢がでましたら y (yes)、 3 の差分の選択肢がでたら n (no) を選びます

$ git commit -m "○○先輩からの 1 の修正事項を反映"

おやおや、さらに修正が必要となりました

3. はまだ決定ではないですが、 2. は決定で以下のように修正してほしいとのこと

## アジェンダ

1. ほげほげほげ: 卜部 (10分)
2. ふが: はなこ (10分)
3. うぎゃー: たろう (10分)

3の修正が邪魔なので、以下のように対応します

git add -p のコマンドの癖をつけておくと、普段から関係のないコミットがまざらなくなるので便利

$ git stash save "決定していない修正" # コミットされていない 3 の修正を退避
$ vim 20200115-SRE-cost-down-MTG.md # エディタで 2 を修正
$ git add -p # 2 の修正を選択
$ git commit -m  "★★先輩からの 2 の修正事項を反映"

3 の内容が先程退避した内容で決定したとのこと

$ git stash list # 先程退避した修正を確認
$ git stash show stash@{0} -p # 表示された退避分の差分を確認
$ git stash pop stash@{0} # 退避した差分を戻す
$ git add -p # 差分をステージに反映
$ git commit -m "○○先輩からの 3 の修正事項を反映"

別の MTG のアジェンダを考える必要がでてきました

コミットを混ぜたくないので、別のブランチを作って作業を行います。

$ git checkout -b feature/20200201-SRE-security-MTG

# アジェンダを残します

$ vim 20200201-SRE-security-MTG.md

## アジェンダ

1. AWS の人からサービス紹介: Mr.AWS (10分)
2. OZV 側から質技応答: 真一 (15分)

$ git add 20200201-SRE-security-MTG.md
$ git commit -m"AWS の人との MTG アジェンダ"

それぞれ MTG が終わったので、master ブランチにマージします

$ git checkout master
$ git merge feature/20200201-SRE-security-MTG --no-ff

便利機能: gitconfig

git には .gitconfig をいう自分用の設定をエイリアスなどで定義することができます

こちらの gist
~/.gitconfig の設定を参考に alias を追加してみましょう。

上記の エイリアス追加後、以下のコマンドを打ってみましょう

$ git l # コミットログが グラフ表示されます (gitk と打つと gui のグラフを人によっては表示できます)
$ git di # 単純に git diff のエイリアスです

便利機能: 別サービスからパッチファイルを作り、適用しよう

$ git clone https://github.com/php/php-src.git
$ cd php-src
$ git format-patch 127d6f3f39235478d124635822343c2cd1205f4d..f6fbe13717c817cd9b4761bfad9f62fd8d3fa6b4

$ ls *.patch # バッチファイルが2つほど作成される
$ git checkout -b hogehoge 127d6f3f39235478d124635822343c2cd1205f4d
$ cd ..
$ git clone -b hogehoge php-src new-php-src # hogehoge ブランチベースで関係のないリポジトリを作る
$ cd new-php-src; rm -rf .git; git init; git add .; git commit -m"全然違うリポジトリ" #  関係のないリポジトリを初期化

$ cp -v ../php-src/000*.patch .
$ git am -3 *.patch # パッチが順番に適用される
$ git l # 履歴ができた

便利機能: git-grep

高速に grep できるので便利です。

$ git grep -i "urabe"  # 大文字小文字区別しない
$ git grep -E "[a-z]+0(1|hoge)"  # 正規表現
$ git grep -w "urabe" # 単語として検索 -> urabebebebe はヒットしない
$ git grep -B2 "urabe" # ヒットした文字プラス前2行を表示
$ git grep -A2 "urabe" # ヒットした文字プラス後2行を表示
$ git grep -C2 "urabe" # ヒットした文字プラス前後2行を表示
$ git grep -e "urabe" --and -e "shinichi" # and 検索: 同じ行に該当2つの文字列がある
$ git grep -e "urabe" --or -e "shinichi" # or 検索: 同じ行にいずれかの文字列がある
$ git grep -l "urabe" # ヒットしたファイルをだす
$ git grep -c "urabe" # ヒットした件数をだす
$ git grep "urabe" -- src/AppBundle # src/AppBundle 配下だけ検索
$ git grep "urabe" -- ':!src/AppBundle' ':!src/HogeBundle'  # src/AppBundle と src/HogeBundle は検索対象としない
$ git grep -W "urabe"  # 該当箇所が含まれる関数のスコープで検索
$ git grep --untracked "urabe" # バージョン管理外のファイルも検索
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

GitHubのプルリク時とかで、特定のcommit間の差分を出す (ブランチ同士も可

プルリクなんかで差分見せる時に、どこを見せたらわかりやすいかなと悩むことがある。
その場合、複数commitをまたいで、特定のcommit 2点間でdiffを取れたので報告。

compare

URLで指定するのが早そう。

https://github.com/<USER>/<REPOSITORY>/compare/<COMMIT HASH>...<BRANCH>

上記のように、repository名のあとに、compareとして、比較したい2つのコミット、ブランチを ... でつなぐ。
ここの指定については、 git diff の指定と同様にできそう。

diffの指定例
$ git diff 114514b fa52110

上記の git diff の例のように、コミット間でもブランチ間でも、ok

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

SourceTreeSetup-3.3.6を導入、Cloneエラー解決

指定リポジトリをクローン時に Failed connect to BitBucket.org:443 エラーが出た

調べたところ下記で解決(※Googleログインでアトラシアンにログイン後)

ツール -> オプション -> ネットワークで
Git/Mercurialにプロキシサーバー設定を追加にチェックを入れる。

cloneできた。

SourceTree設定.png

参考URL: http://vild.hatenablog.com/entry/2015/08/20/171535

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む