[Windows] そのexeがx64かx86かを見分ける方法 Part2

先日、こんなブログを書きました

このブログを公開したところ、Twitterで @ripjyr さんより
macなら file コマンドあるよと教えていただいたので追加記事を書いておきます~

上記のブログ記事では、 exe データが 32bit なのか 64bit なのかを調べるやりかたとして
3つのチェック方法を記載しました

今回は4つ目の方法の紹介です~!

パターン4. file コマンドで調べる(macOSの場合)

これは mac のみの環境で、Win exe を調べたいって時のお話です

mac には file コマンドがあって、それを使うと簡単に Windows exe のビット(PEヘッダ)を調べることができます

$ file 調べたいファイル名 

PE32 executable (GUI) Intel 80386, for MS Windows と表示されます!

1
2
$ file AGDRec.exe  
AGDRec.exe: PE32 executable (GUI) Intel 80386, for MS Windows

PE32+ executable (GUI) x86-64, for MS Windows とでます

1
2
$ file AGDRec64.exe
AGDRec64.exe: PE32+ executable (GUI) x86-64, for MS Windows

真に、素の mac でバイナリデータを見たいときは、これが良いですぅ!!!

謝辞

@ripjyr さん、教えてくださってありがとうございました ^^


[Windows] そのexeがx64かx86かを見分ける方法

手元にあるexeが64bitなのか32bitなのかを知りたい…

開発してるとこういう時がたまにあると思う…

多分ちょっとニッチな需要だけど、検索したらちゃんと誰かが既に調べてくれていました!

パターン1. Windows のメモ帳(notepad.exe)を使って調べる

何にもない環境でも、OS が Windows なら必ず入っているメモ帳”φ(・ェ・o)~メモメモ

これで調べるのが一番簡単な調査方法だと思います~

  1. メモ帳:notepad.exe で調べたい exe ファイルを開く

  2. 文字列 PE を検索する
    こんな感じ↓↓↓

  3. PE の後ろに空白がちょっとだけあり、その後に続く文字で判別できます

ふむふむなるほど!

パターン2. バイナリエディタを使って調べる

最近のバイナリエディターのおススメは hexdump for VSCode です
昔は TEXBIN を使ってましたが、VSCode 内で完結するのが良いですね~

  1. VSCode を開く

  2. 調べたい exe をドラッグ&ドロップする

  3. こんなメッセージが出る…(だが気にしない)

    1
    2
    
    The file is not displayed in the editor becouse it is either binary or users an unsupported eext encoding.
    Do you want to open it anyway?
  4. 右上に出てる Show Hexdump をポチッ!

  5. バイナリモードで見て、0x0100 前後(ファイルによる)の番地あたりに
    0x5045 (つまり PE )から始まる文字列があるので探す

  6. こんな感じ

ふむふむ、この方法も良い感じです(・ω・)ノ

パターン3. hexdump コマンドで調べる(macOSの場合)

mac しか持ってない環境で VSCode も入ってなくて Windows の exe のビットを調べたい時って一体…!?
とは思いますが(><)
先日、わたし自身が必要だったので、これも調べてしまいました

VSCodeがあればパターン2 の方法で調べられるのですが
mac の標準環境だけで調査したいときは、hexdump が標準で装備されているので
それを使うのも手です(。・_・。)ノ

# [-n バイト数] で先頭からのバイト数の分だけ表示出来る
$hexdump -n 400 バイナリを調べたいファイル名

上記の例だと、x86 のようですね
良い感じです

素の mac でバイナリデータを見たいときは、これが良いかも
パターン4がありました(追記)

パターン4. file コマンドで調べる(macOSの場合)

後日、こちらに追記しました

備考

いくつか他の exe のバイナリデータを見てみました

だいたいファイルの先頭の 0x0080 ~ 0x0140 くらいまでに PEヘッダがあるようです

参考


[C++] 実行環境の差異によるintワーニングが出ない書き方

C++のワーニングを放置していたのですが、そっと @srz_zumix さんが教えてくれてました

忘れないうちに”φ(・ェ・o)~メモメモ


x86環境とx64環境が混在してる場合にエラーが出やすい

こんなやつとか出ます…

1
2
3
4
5
6
// Warning が出る例
std::vector<int> my_vec = { 0, 42 };
uint32_t max_loop_counter = my_vec.size();  // ←ここね
uint32_t counter = 0;

// 以下、counter を max_loop_counter までなんらかの処理

これは x86環境だと warning は出ないのですが x64 環境想定でコンパイルすると、ワーニングが出ます

(Clangの例)
warning: Implicit conversion loses integer precision: ‘std::__1::vector >::size_type’ (aka ‘unsigned long’) to ‘u_int32_t’ (aka ‘unsigned int’) [-Wshorten-64-to-32]

( ̄□ ̄;
ええ、ええ、判っていますとも…
int 型が処理系によって異なるのは…

そこで、やっつけで修正するならこれ

1
2
// ベタにワーニングを取ろうとするとこんな感じ
uint32_t max_loop_counter = static_cast<uint32_t>(my_vec.size());

なのですが、もっとスマートは方法があります

1
2
3
4
// 今っぽい感じに
std::vector<int> my_vec = { 0, 42 };
auto max_loop_counter = my_vec.size();
decltype(max_loop_counter) counter = 0;

エレガントになりました…!素晴らしい(^^♪

警告のコンパイラー対応表がある

@srz_zumix さんが最近始められたプロジェクトらしいです

ワーニング対応表欲しいな…と思っていたところなので、結構良いかもしれない…

そして今日もC++修練は続く…


[Github] Github Actionsでブログを更新するようにしました

元々、このブログは hugo で作った静的HTMLを wercker でオートデプロイして作っていました
だけど wercker は設定の変更が多くてすぐにデプロイ出来なくなっていたんですよね~で、辞めました
これを作った当時は wercker がイケイケドンドンだったので
CircleCI から乗り換える人も多かったのですが
今となってはカジュアルデプロイは CircleCI …いやいや Github Actions があるやないか!
ということで、 Github Actions でデプロイするようにしてみました

Github Actions の設定ON

ここをポチっと押すと、Actionsの設定画面へ

Github Actions の設定ファイルを書いてみる

知識なしで初めてみましたが、すんなり簡単にビルド&デプロイすることが出来ました

というのも、GitHub Actions for GitHub Pages というデプロイするためのオールインワンアクションを公開してくれている方がいらっしゃいました
設定ファイルをまんま真似するだけで使えます

そしてこの方、hugo 対応のアクションも公開して下さっています!

ここの例に書いてる yaml ファイルのまんまで良い感じにデプロイ出来ました

こんな感じ↓↓↓

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
# This is a basic workflow to help you get started with Actions

name: Deploy Github Pages to Hugo

# Controls when the action will run. Triggers the workflow on push or pull request
# events but only for the master branch
on:
  push:
    branches: [ master ]

# A workflow run is made up of one or more jobs that can run sequentially or in parallel
jobs:
  # This workflow contains a single job called "build"
  build:
    # The type of runner that the job will run on
    runs-on: ubuntu-latest

    # Steps represent a sequence of tasks that will be executed as part of the job
    steps:
      # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it
      - uses: actions/checkout@v2
      
      - name: Hugo setup
        uses: peaceiris/actions-hugo@v2
        with:
          # The Hugo version to download (if necessary) and use. Example: 0.58.2
          hugo-version: 0.54.0 
          # Download (if necessary) and use Hugo extended version. Example: true
          # extended: true 

      # Runs a single command using the runners shell
      - name: Build Hugo
        run: hugo -v

      # Runs a set of commands using the runners shell
      - name: Deploy
        uses: peaceiris/actions-gh-pages@v3
        with:
          github_token: ${{ secrets.GITHUB_TOKEN }}
          publish_dir: ./public

超カンタンでした(。・_・。)ノ

CNAME 対応

Github Pages でカスタムドメインを使う際には
Github Pages の公開ブランチ(わたしの場合 gh-pages )のルートにドメイン名を記載した CNAME ファイルを設置する必要があるのですが
これが peaceiris/actions-gh-pages を使ってデプロイした際に、消えてしまってました

アクションの方の設定で対応することも出来たようなのですが
わたしはHugoそのものの設定を変えて、対応しました

Hugo の変換元のディレクトリに static/CNAME を設置するだけです
これも超カンタン

感想

SSHキーの外部登録などもしなくて良いし、Github の中で閉じてビルド&デプロイ出来るのが良いですね!

コネコネしたいときは CircleCI とか使うかもなぁと思いつつ、Github へのアクションメインの自動化であれば、これで充分ですね
今後も使っていくと思います~

参考


[c++] 2次元配列的な書き方

自分メモ

2次元配列

C++11 以前では、2次元配列はこんな感じで書いていました

1
2
3
4
5
6
// 2-dimensional array (raw type)
constexpr static float xy_raw[][2] = {
      { 0.f,  10.f}  // 0
    , { 20.f, 30.f}  // 1
    , { 40.f, 50.f}  // 2
};

これでも悪くは無いのですが、生配列を扱うと範囲外アクセスに気が付かない可能性が出てきます そこで C++11 から境界チェックが出来る配列の std::array が登場しました
これを使えば、C-styleの配列のノリで扱うことが可能です

さらに2次元配列にしたければ std::arraystd::vector に入れることで実現可能です

1
2
3
4
5
6
// 2-dimensional array (using stl)
const std::vector<std::array<float, 2>> xy_array = {
      { 0.f,  10.f}  // 0
    , { 20.f, 30.f}  // 1
    , { 40.f, 50.f}  // 2
};

悪くなさそう

動作確認

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
#include <iostream>
#include <vector>
#include <array>

int main() {
  // ---------------------------------
  // 2-dimensional array (raw type)
  constexpr static float xy_raw[][2] = {
        { 0.f,  10.f}  // 0
      , { 20.f, 30.f}  // 1
      , { 40.f, 50.f}  // 2
  };

  std::cout << "xy_raw[0][1]: " << xy_raw[0][1] <<  "\n"; // 10

  // xy_raw[1][2] は out of rangeだけど warningになってる
  // これはたまたま xy_raw[2][0] と同じなので動作しているだけ
  std::cout << "xy_raw[1][2]: " << xy_raw[1][2] <<  "\n"; // 40

  // ---------------------------------
  // 2-dimensional array (using stl)
  const std::vector<std::array<float, 2>> xy_array = {
        { 0.f,  10.f}  // 0
      , { 20.f, 30.f}  // 1
      , { 40.f, 50.f}  // 2
  };

  std::cout << "xy_array[2][0]: " << xy_array.at(2).at(0) <<  "\n";  //40  

  // compile error
  //std::cout << "xy_array[1][2]: " << xy_array.at(1).at(2) <<  "\n";  // out of range accsess
}

結果

xy_raw[0][1]: 10
xy_raw[1][2]: 40
xy_array[2][0]: 40

コンパイル時に教えてくれるので助かります

参考


[WindowsTerminal] Preview版のインストール&Git Bashを追加したい

Windows Terminal …どんなもんだろなと思って、使ってみました

もともとは、Gitのブランチ名をコマンドプロンプトに表示できたらいいのにー と思って調べたのでした
Windows Terminal に Git Bash (正確には Git for Windows ) が登録できるようなので、それをやってみました

Windows Terminal (Preview)のインストール

普通に 「Windows Terminal download」で検索すると、わたしの場合「マイクロソフトストア」のリンクがトップに来ましたけど
ストアとかよくわからんし…

よく見ると Windows Terminal は GitHub に公開されてます

ここから Preview版をGet★

3/19時点では、Windows Terminal Preview v0.10.761.0 のバージョンでした


以下、やったこと

1) msixbundle を実行するとこんな画面↓↓↓

2) インストールを押すと、わたしの環境ではエラーになりました

エラーメッセージ内容:

Microsoft.WindowsTerminal_0.10.761.0_x64__8wekyb3d8bbwe をインストールできません。このパッケージはデバイスと互換性がありません。このパッケージをインストールするには、OS バージョン 10.0.18362.0 またはそれ以降の Windows.Mobile デバイス ファミリが必要です。現在、デバイスでは OS バージョン 10.0.17763.1098 が実行されています。 (0x80073cfd)

おぉ。。。めっちゃ判りやすいメッセージが!

3) よくわからんけど、Windows Updateしてみます

4) もう一度ダウンロードした msixbundle を実行

5) 正常にインストールできたみたい!

6) 開くウィンドウのタイプを選べます

よしよし

タブに Git Bash を追加

先人が居てました。。。!

あと中の人のスコット・ハンセルマンのブログも参考になりました

真似してわたしもやってみます

7) PowerShell で GUIDを取得します

GUIDの設定は、生成できるものであればなんでも良いみたいです

GUID生成サイトもありました(。・_・。)

わたしは PowerShell で作ってみます

> [guid]::NewGuid()

こんな感じで取得できました

8) Windows Terminal の settings を開きます

これは json ファイルになってました

わたしの環境では、以下のパスに存在していました
※ xxx… は編集しています、適当な文字列でした

C:\Users\akiko.kawai\AppData\Local\Packages\Microsoft.WindowsTerminal_xxxxxxxxxxxxx\LocalState\profiles.json

デフォルトの中身はこんな感じ↓↓↓

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
// To view the default settings, hold "alt" while clicking on the "Settings" button.
// For documentation on these settings, see: https://aka.ms/terminal-documentation

{
    "$schema": "https://aka.ms/terminal-profiles-schema",

    "defaultProfile": "{61c54bbd-c2c6-5271-96e7-009a87ff44bf}",

    "profiles":
    {
        "defaults":
        {
            // Put settings here that you want to apply to all profiles
        },
        "list":
        [
            {
                // Make changes here to the powershell.exe profile
                "guid": "{61c54bbd-c2c6-5271-96e7-009a87ff44bf}",
                "name": "Windows PowerShell",
                "commandline": "powershell.exe",
                "hidden": false
            },
            {
                // Make changes here to the cmd.exe profile
                "guid": "{0caa0dad-35be-5f56-a8ff-afceeeaa6101}",
                "name": "cmd",
                "commandline": "cmd.exe",
                "hidden": false
            },
            {
                "guid": "{b453ae62-4e3d-5e58-b989-0a998ec441b8}",
                "hidden": false,
                "name": "Azure Cloud Shell",
                "source": "Windows.Terminal.Azure"
            }
        ]
    },

    // Add custom color schemes to this array
    "schemes": [],

    // Add any keybinding overrides to this array.
    // To unbind a default keybinding, set the command to "unbound"
    "keybindings": []
}

9) profiles の個所に以下を追加します

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
{
    // さっき PowerShellで作ったGUID
    "guid": "{99999999-9999-9999-9999-999999999999}",
    // ウィンドウの半透明度合い
    "acrylicOpacity" : 0.75,
    "closeOnExit" : true,
    "colorScheme" : "Campbell",
    // Git Bash の exe のある場所
    "commandline" : "\"%PROGRAMFILES%\\git\\usr\\bin\\bash.exe\" -i -l",
    "cursorColor" : "#FFFFFF",
    "cursorShape" : "bar",
    "fontFace" : "Consolas",
    "fontSize" : 10,
    "historySize" : 9001,
    // CMDアイコンならこれ
    //"icon" : "ms-appx:///ProfileIcons/{0caa0dad-35be-5f56-a8ff-afceeeaa6101}.png",
    // Git for Windows の ico ファイルを直接指定することも出来る
    "icon" : "%PROGRAMFILES%\\git\\mingw64\\share\\git\\git-for-windows.ico"
    // 追加タブに表示する名前
    "name" : "GitBash",
    "padding" : "0, 0, 0, 0",
    "snapOnInput" : true,
    // 初期ディレクトリ、 "C:\\dev" などでもOK
    "startingDirectory" : "%USERPROFILE%",
    "useAcrylic" : true
}

◆アイコンについて

アイコンの登録は ms-appxのURL のまんまが使えるみたいです

参考:

試しに Linux アイコンにしてみたら、ペンギンになりました(。・_・。)ノ

CMDアイコンだとこんな感じ


◆GUIDについて

今回は GUID は適当なものを PowerShell で作りましたが

profiles.json の中の "defaultProfile" の値を
自分の Git Bash の GUIDに設定すると
Windows Terminal のデフォルト起動時のウィンドウに出来ました


◆profiles.json

profiles.json の全体像はこんな感じ

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
// To view the default settings, hold "alt" while clicking on the "Settings" button.
// For documentation on these settings, see: https://aka.ms/terminal-documentation

{
    "$schema": "https://aka.ms/terminal-profiles-schema",

    "defaultProfile": "{61c54bbd-c2c6-5271-96e7-009a87ff44bf}",

    "profiles":
    {
        "defaults":
        {
            // Put settings here that you want to apply to all profiles
        },
        "list":
        [
            {
                // Make changes here to the powershell.exe profile
                "guid": "{61c54bbd-c2c6-5271-96e7-009a87ff44bf}",
                "name": "Windows PowerShell",
                "commandline": "powershell.exe",
                "hidden": false
            },
            {
                // Make changes here to the cmd.exe profile
                "guid": "{0caa0dad-35be-5f56-a8ff-afceeeaa6101}",
                "name": "cmd",
                "commandline": "cmd.exe",
                "hidden": false
            },
            {
                "guid": "{b453ae62-4e3d-5e58-b989-0a998ec441b8}",
                "hidden": false,
                "name": "Azure Cloud Shell",
                "source": "Windows.Terminal.Azure"
            },
            {
                // さっき PowerShellで作ったGUID
                "guid": "{99999999-9999-9999-9999-999999999999}",
                // ウィンドウの半透明度合い
                "acrylicOpacity" : 0.75,
                "closeOnExit" : true,
                "colorScheme" : "Campbell",
                // Git Bash の exe のある場所
                "commandline" : "\"%PROGRAMFILES%\\git\\usr\\bin\\bash.exe\" -i -l",
                "cursorColor" : "#FFFFFF",
                "cursorShape" : "bar",
                "fontFace" : "Consolas",
                "fontSize" : 10,
                "historySize" : 9001,
                // CMDアイコンならこれ
                //"icon" : "ms-appx:///ProfileIcons/{0caa0dad-35be-5f56-a8ff-afceeeaa6101}.png",
                // Git for Windows の ico ファイルを直接指定することも出来る
                "icon" : "%PROGRAMFILES%\\git\\mingw64\\share\\git\\git-for-windows.ico"
                // 追加タブに表示する名前
                "name" : "GitBash",
                "padding" : "0, 0, 0, 0",
                "snapOnInput" : true,
                // 初期ディレクトリ、 "C:\\dev" などでもOK
                "startingDirectory" : "%USERPROFILE%",
                "useAcrylic" : true
            }
        ]
    },

    // Add custom color schemes to this array
    "schemes": [],

    // Add any keybinding overrides to this array.
    // To unbind a default keybinding, set the command to "unbound"
    "keybindings": []
}

10) おぉ!Bashタブがリアルタイムに追加されてる!

Windows Terminal を開きっぱなしの状態でも
追加のタブを見ると Git Bash 項目が見えました
やったー

11) 作業したいブランチ名もちゃんと表示されてます

当然といえば当然


結構いろいろと簡単にやりたいことが出来た印象です

調べてもすぐ情報が見つかったし
WindowsTerminal、早く Preview 取れて欲しいですね♪


[GitHub Pages] カスタムドメインのDNS情報を更新する

去年、2019年の4月くらいから
GitHub Pages にファイルをアップすると、ワーニングが出るようになった

内容はこんなやつ

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
Title: [h-sao/h-sao.com] Page build warning

The page build completed successfully, but returned the following warning for the `gh-pages` branch:

The custom domain for your GitHub Pages site is pointed at an outdated IP address. You must update your site's DNS records if you'd like it to be available via your custom domain. For more information, see https://help.github.com/en/github/working-with-github-pages/configuring-a-custom-domain-for-your-github-pages-site.

For information on troubleshooting Jekyll see:

  https://help.github.com/articles/troubleshooting-jekyll-builds

If you have any questions you can contact us by replying to this email.

(* ̄- ̄)ふ~ん、よくわからんけど
何やらDNSの設定を変えないといけないのね

めんどくさー
後で後で…と思い続けて早10か月ほど…

さすがに対応しないと、自分のブログがアクセスできなくなるかもと焦り、重い腰を上げました

(前提条件)このブログの運用情報

カスタムドメインを GitHub Pages に割り当てる方法

調べてみると全然難しくなくて
上記のワーニングメールに書かれてたURLにアクセスしたら、全てが書かれてました

ただわたしにとっては真剣に読む気で読まないと頭の中スルー…って感じの内容だったので、ちょっと真剣に読んでみました

英語版はこれ↓↓↓なのですけど

https://help.github.com/en/github/working-with-github-pages/managing-a-custom-domain-for-your-github-pages-site

ご丁寧に日本語版も提供されています

これを見ながらやってみます

まずわたしのGitHub Pagesの設定画面は、こんな感じで黄色いワーニングが出てました

今までずーっと無視してきましたが、いよいよ解決する日が来ましたよ

わたしが割り当てているカスタムドメインは Apex ドメイン になっています
( www.h-sao.com ではなく、 h-sao.com としてアクセス)

日本語版の「カスタムドメインとGitHub Pagesについて」の説明を読んでみると、
「GitHub Pages サイト用のカスタムドメインを管理する」を参照してください。 とあるので、素直にそのリンクに飛びます

ここにありました! Apexドメインを設定する方法が!
A レコードのIPアドレスが書いてありました

185.199.108.153
185.199.109.153
185.199.110.153
185.199.111.153

あと、最初の「カスタムドメインとGitHub Pagesについて」には、こんな記載もありました

サイトには、カスタムドメインの一方または両方を設定できます。 Apex ドメインを使用している場合でも、www サブドメインを使用することをおすすめします。

ふむふむ、www は付けるのを推奨してるのね、了解
cname も追加してみました

# 設定するAレコード
a @ 185.199.108.153
a @ 185.199.109.153
a @ 185.199.110.153
a @ 185.199.111.153

# サブドメインも設定しておく
cname www h-sao.github.io.

Valueドメインの設定画面

これを設定すると、わたしの場合はちょうど15分後に設定が反映されました

よかったー!


[Git] Gitの歴史を書き換える関連

よくやらかすので自分メモ

事前準備

# 今いるブランチの確認
$ git branch

# ブランチに移動
$ git checkout feature/xxxxx

PR出す前、きれいな環境にしたいなどで整えておきたいこと

# 手動ブランチの取得/追従
$ git checkout feature/yyyyy
$ git pull

ローカル作業全てを無かったことにする

git fetch origin
git reset --hard origin/master

pushしてしまった歴史を書き換える

# 自分の名前のコミットを検索
$ git log --committer="Sao Haruka"

# ↑の gitlog より戻りたいハッシュ値を探す

$ git reset [戻りたいコミットのハッシュ値] --hard

# 強制push
$ git push -f origin feature/xxxxx

既に feature/xxxxx で誰かが作業していたら強制プッシュはあきらめる

不要になったブランチを削除する

要らないブランチは削除しとく

$ git push --delete origin feature/xxxxx

PRに不要なコミットが混じる

原因:

マージ先の最新を取っとくと大丈夫


[Git] Commit&PushしてしまったAuthor情報を変更したい

最近、GitKraken を使って更新をしています
Pro バージョンだとアカウント情報の切り替えが簡単に出来るので
会社用や個人用に切り替えて作業するのがとても便利です

しかしたまに切り替え忘れて、本来のアカウントじゃないやつでコミットしてしまって
意図しないメアドやユーザ名が入ったりして…(-“-;A …アセアセ

そんなときの変更の方法です

Author 変更方法

直前のコミットを変更したい場合です

$ git commit --amend

を使うと、コミット履歴が書き換えられるんですけど
これで書き換えると、コミットの作者(Author)は変わらず、コミッター(Commiter)が変わるだけです

Authorを書き換えるには

$ git commit --amend --author="Sao Haruka <sao@tmp.com>"

こうすると書き換わります
こんな感じね↓↓↓

1
2
3
4
$ git commit --amend --author="Sao Haruka <sao@tmp.com>"
[feature/xxxxx 9999999999] [WIP] Added hogehoge
 Date: Thu Oct 10 22:30:00 2019 +0900
 1 files changed, 1 insertions(+), 1 deletions(-)

書き換わったー!

サーバーに push しちゃってるとき

もし自分だけの作業ブランチでやってるのであれば、サーバーの履歴を強制的に書き換えることが出来ます
(共通ブランチでは、強制書き換えはやめよう)

$ git push -f [repository] [branch]

恐る恐るやってみる

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
# まずは強制オプションをつけずにやってみる(もちろんエラー)

$ git push origin feature/xxxxx
To tmp.com:ohoho/hoge.git
 ! [rejected]              feature/xxxxx -> feature/xxxxx (non-fast-forward)
error: failed to push some refs to 'tmp.com:ohoho/hoge.git'
hint: Updates were rejected because the tip of your current branch is behind
hint: its remote counterpart. Integrate the remote changes (e.g.
hint: 'git pull ...') before pushing again.
hint: See the 'Note about fast-forwards' in 'git push --help' for details.

# 強制オプションをつけてpush

$ git push -f origin feature/xxxxx
Enumerating objects: 1, done.
Counting objects: 100% (1/1), done.
Delta compression using up to 1 threads
Compressing objects: 100% (1/1), done.
Writing objects: 100% (1/1), 1 KiB | 1 MiB/s, done.
Total 1 (delta 1), reused 0 (delta 0)

事なきを得た(_・ω・)_バァン…

参考:


[Hugo] Hugoの環境をDocker上で動かす

今回の環境

このブログは Hugo というスタティックジェネレーターで作っています

Hugoは golang で動いているので、ローカルに Go の環境が必要なわけですが
以前、MacBookの中にダイレクトに Hugo をインストールしていたら、別で入っているGoのバージョンと、うまくかみ合わなくなったことがありました

解決に結構時間が取られちゃったので、もう macOSを使うときには、なんでもかんでも docker で分離しようと心に決めたのでした…

その方法です

やってみたら、超簡単でした


Hugo に対応した docker image をダウンロード

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
# Hugo で docker を検索
sao$ docker search hugo
NAME                  DESCRIPTION                            STARS    OFFICIAL  AUTOMATED
jojomi/hugo     hugo, see https://gohugo.io                     44               [OK]
publysher/hugo  Docker base image for static sites generated…   37               [OK]
monachus/hugo   Docker image for building and running Hugo (28               [OK]
klakegg/hugo    Minimal image and variants with batteries in…   22               [OK]
cibuilds/hugo   Docker image for Hugo, the static-site gener…   10  
…
…(いっぱいあった)

今回わたしは、klakegg/hugo のバージョンを使うことにしました

1
2
# ダウンロード
sao$ docker pull klakegg/hugo

起動

1
2
3
4
5
6
7
# ローカルのマークダウンファイルの場所に移動
sao$ cd h-sao.com/

# まんまこのコマンドでOK
h-sao.com sao$ docker run --rm -it -v $(pwd):/src -p 1313:1313 klakegg/hugo:0.55.0 server

# ブラウザで http://localhost:1313 にアクセスするとOK

超超超簡単でした。。。

これからも mac環境では docker さまに当分お世話になりますm(_ _)m