Nobusuke IWASAKI
    • Create new note
    • Create a note from template
      • Sharing URL Link copied
      • /edit
      • View mode
        • Edit mode
        • View mode
        • Book mode
        • Slide mode
        Edit mode View mode Book mode Slide mode
      • Customize slides
      • Note Permission
      • Read
        • Only me
        • Signed-in users
        • Everyone
        Only me Signed-in users Everyone
      • Write
        • Only me
        • Signed-in users
        • Everyone
        Only me Signed-in users Everyone
      • Engagement control Commenting, Suggest edit, Emoji Reply
    • Invite by email
      Invitee

      This note has no invitees

    • Publish Note

      Share your work with the world Congratulations! 🎉 Your note is out in the world Publish Note

      Your note will be visible on your profile and discoverable by anyone.
      Your note is now live.
      This note is visible on your profile and discoverable online.
      Everyone on the web can find and read all notes of this public team.
      See published notes
      Unpublish note
      Please check the box to agree to the Community Guidelines.
      View profile
    • Commenting
      Permission
      Disabled Forbidden Owners Signed-in users Everyone
    • Enable
    • Permission
      • Forbidden
      • Owners
      • Signed-in users
      • Everyone
    • Suggest edit
      Permission
      Disabled Forbidden Owners Signed-in users Everyone
    • Enable
    • Permission
      • Forbidden
      • Owners
      • Signed-in users
    • Emoji Reply
    • Enable
    • Versions and GitHub Sync
    • Note settings
    • Note Insights
    • Engagement control
    • Transfer ownership
    • Delete this note
    • Save as template
    • Insert from template
    • Import from
      • Dropbox
      • Google Drive
      • Gist
      • Clipboard
    • Export to
      • Dropbox
      • Google Drive
      • Gist
    • Download
      • Markdown
      • HTML
      • Raw HTML
Menu Note settings Versions and GitHub Sync Note Insights Sharing URL Create Help
Create Create new note Create a note from template
Menu
Options
Engagement control Transfer ownership Delete this note
Import from
Dropbox Google Drive Gist Clipboard
Export to
Dropbox Google Drive Gist
Download
Markdown HTML Raw HTML
Back
Sharing URL Link copied
/edit
View mode
  • Edit mode
  • View mode
  • Book mode
  • Slide mode
Edit mode View mode Book mode Slide mode
Customize slides
Note Permission
Read
Only me
  • Only me
  • Signed-in users
  • Everyone
Only me Signed-in users Everyone
Write
Only me
  • Only me
  • Signed-in users
  • Everyone
Only me Signed-in users Everyone
Engagement control Commenting, Suggest edit, Emoji Reply
  • Invite by email
    Invitee

    This note has no invitees

  • Publish Note

    Share your work with the world Congratulations! 🎉 Your note is out in the world Publish Note

    Your note will be visible on your profile and discoverable by anyone.
    Your note is now live.
    This note is visible on your profile and discoverable online.
    Everyone on the web can find and read all notes of this public team.
    See published notes
    Unpublish note
    Please check the box to agree to the Community Guidelines.
    View profile
    Engagement control
    Commenting
    Permission
    Disabled Forbidden Owners Signed-in users Everyone
    Enable
    Permission
    • Forbidden
    • Owners
    • Signed-in users
    • Everyone
    Suggest edit
    Permission
    Disabled Forbidden Owners Signed-in users Everyone
    Enable
    Permission
    • Forbidden
    • Owners
    • Signed-in users
    Emoji Reply
    Enable
    Import from Dropbox Google Drive Gist Clipboard
       owned this note    owned this note      
    Published Linked with GitHub
    Subscribed
    • Any changes
      Be notified of any changes
    • Mention me
      Be notified of mention me
    • Unsubscribe
    Subscribe
    # 法務省地図XMLダイジェストを頑張って再現してみる! ###### tags: `OSGeo` ###### tags: `FOSS4G` `amxproject` `OSGEO` `GIS` `mysql` ## 概要 [法務省地図XMLダイジェスト](https://github.com/sakaik/kuwanauchi_xml_digest)を@sakaikさんが作られているので、自分でもやってみる ## 作業 ### まず読む! #### 大きな作業の流れ - まず、getBasicInfo2.pyで、基本情報を読み出す - 次に、これを[MySQLへのデータロード方法](https://github.com/sakaik/kuwanauchi_xml_digest/blob/main/text/how_to_load_to_mysql.md)を参考に、MySQLに読み込む #### getBasicInfo2.py を実施 - 使い方は、[スクリプトについて](https://github.com/sakaik/kuwanauchi_xml_digest/blob/main/text/about_script.md)に書かれている - 作業手順 - 動作環境を確認する - Python3が動くこと - OSGeo4WのPython3が、3.9.5なのでOK - xmltodictが動くこと - pip install mltodict - すでにインストール済み - xmlをクローンする - サンプルとして、https://github.com/amx-project/kuwanauchi37kagawa - 解凍して配置 - amx\kuwanauchi37kagawa-main にサンプルを多く - 時間がかかるそうなので、一部を、amx\37201 に配置 - 37201はきっと、高松市 - getBasicInfo2.py 2つ上に配置 - [scripts](https://github.com/sakaik/kuwanauchi_xml_digest/tree/main/scripts)の中の[run_scripts.txt](https://github.com/sakaik/kuwanauchi_xml_digest/blob/main/scripts/run_scripts.txt)を参考に実行 - `python3 getBasicInfo2.py amx\37201 amx/ 37kawaga37021` - ![](https://i.imgur.com/0TGaKVA.png) - 走っている - たしかに、ちょっと時間がかかる(汗 - zipをxmlに解凍したもので試してみる - amx\08201 を ためす - `python3 getBasicInfo2.py amx\08201 amx/ 08ibaraki08201` - うまくいかない - できれば、zipでなくxmlでやりたいなぁ。 - 解凍したxmlに対応したものを、作ってみる - getBasicInfo_for_xml.py - zipとxmlで比較 - ファイルは2つ - 37208-4702-97と37201-4700-330 - zipは、7M, 9M. xmlは274M, 352M - 手動計測で比較 - zipで1:12秒、xmlで1:12秒。変わらないことが確認できたので、OK(笑 - 出力は、2つのファイル。[出力ファイル(CSVフォーマット)について](https://github.com/sakaik/kuwanauchi_xml_digest/blob/main/text/data_format.md)より抜粋 - 概要 - 基本情報サマリファイル(_summary.csv)と図各情報ファイル(_zukaku.csv)ファイルの2つがあります - ひとつの基本サマリファイルに対して 0..* 個の図郭情報が紐付きます。 - 基本サマリと図郭情報の紐付けはファイル名(今回は XMLではなくZIPファイル名)としています - 基本情報サマリファイル(*_summary.csv) - 各ファイルに1つだけ存在します(filename列でユニーク) - この情報に紐付く図郭情報の数を numbers_of_zukaku列に掲載しています - 図郭情報ファイル(*_zukaku.csv) - (再掲)ひとつのファイルに対して1つまたは複数の図郭が存在します。存在しない場合もあります。 - 次に、mysqlに読み込む - MySQLへの登録 - MySQL ワークベンチから行おうとすると、エラーが出ているのか? - ![](https://i.imgur.com/ikcwarw.png) - chcpコマンドが通らないと言っているが、そんな事があるのか? - よくわかんないから、Workbenchを使わずに、コマンドからやることにする - 作業はMySQL Shellで行うこととした。 - ただし、全体に流れが必要 - DB登録までの流れ 1. ローカルのファイルを読み込み可能な形でクライアントを起動 2. サーバのセッティングを変更して、ローカルファイルの読み込みを可能にする 3. データベースを作る 4. データベースに接続する 5. テーブルを作成する 6. 読み込みを行う - 具体的手順:テーブル作成まで 1. ローカルのファイルを読み込み可能な形でクライアントを起動 - 以下のコマンドを含むショートカットを作成 - `"C:\Program Files\MySQL\MySQL Server 8.0\bin\mysql.exe" "--defaults-file=C:\ProgramData\MySQL\MySQL Server 8.0\my.ini" "-uroot" "-p" "--default-character-set=utf8mb4" "--local-infile=1"` 2. 起動して、サーバの設定を変更 - 起動して、以下のコマンドを実行 - `SET GLOBAL local_infile=on;` - 以下のように帰ってきたので、きっとうまく行ったはず ``` mysql> SET GLOBAL local_infile=on; Query OK, 0 rows affected (0.00 sec) ``` 3. データベースを作る - DBの確認 ``` mysql> show databases; +--------------------+ | Database | +--------------------+ | information_schema | | mysql | | performance_schema | | sys | +--------------------+ 4 rows in set (0.00 sec) ``` - DB作成 ``` mysql> create database amxtest; Query OK, 1 row affected (0.03 sec) ``` - 作成されたDBの確認 ``` mysql> show databases; +--------------------+ | Database | +--------------------+ | amxtest | | information_schema | | mysql | | performance_schema | | sys | +--------------------+ 5 rows in set (0.01 sec) ``` 4. データベースに接続する - データベースに接続 ``` mysql> use amxtest; ``` - カレントデータベースの確認 ``` mysql> select database(); +------------+ | database() | +------------+ | amxtest | +------------+ 1 row in set (0.00 sec) ``` 5. テーブルを作成する ``` CREATE TABLE mojmap_summary_37201 ( filename varchar(100) PRIMARY KEY, city_name varchar(100) , city_code char(5) , map_name varchar(100), coordinate varchar(100) , version varchar(10), sokuti_hanbetu varchar(10), conv_pgm varchar(100), conv_pgm_version varchar(100), conv_pgm_param_version varchar(100), numbers_of_zukaku int ); ``` - MySQL ワークベンチから行おうとすると、エラーが出ているのか? - ![](https://i.imgur.com/ikcwarw.png) - chcpコマンドが通らないと言っているが、そんな事があるのか? - よくわかんないから、Workbenchを使わずに、コマンドからやることにする - 具体的手順:データ読み込み - 以下のコマンドを実行 - `LOAD DATA LOCAL INFILE 'e:\\amx\\37kawaga37021_summary.csv' INTO TABLE mojmap_summary_37201 FIELDS TERMINATED BY ',' IGNORE 1 LINES;` ``` mysql> LOAD DATA LOCAL INFILE 'e:\\amx\\37_xml_summary.csv' INTO TABLE mojmap_summary_37201 FIELDS TERMINATED BY ',' IGNORE 1 LINES; Query OK, 2 rows affected (0.03 sec) Records: 2 Deleted: 0 Skipped: 0 Warnings: 0 ``` - 読み込んだ中身を表示 - `SELECT * FROM mojmap_summary_37201;` ``` mysql> SELECT * FROM mojmap_summary_37201; +--------------------+-----------+-----------+--------------------------------------------------------------+------------------+---------+----------------+----------+------------------+------------------------+-------------------+ | filename | city_name | city_code | map_name | coordinate | version | sokuti_hanbetu | conv_pgm | conv_pgm_version | conv_pgm_param_version | numbers_of_zukaku | +--------------------+-----------+-----------+--------------------------------------------------------------+------------------+---------+----------------+----------+------------------+------------------------+-------------------+ | 37201-4700-1.zip | 高松市 | 37201 | 茜町・西町A | 任意座標系 | ver1.0 | | | | | 1 | | 37201-4700-10.zip | 高松市 | 37201 | 塩上町1丁目~3丁目・観光通1丁目 | 任意座標系 | ver1.0 | | | | | 7 | | 37201-4700-100.zip | 高松市 | 37201 | 本町 | 任意座標系 | ver1.0 | (中略) | 37201-4700-99.zip | 高松市 | 37201 | 北浜町 | 任意座標系 | ver1.0 | | | | | 3 | | 37208-4702-97.xml | 三豊市 | 37208 | YA1kouda14B01 | 公共座標4 系 | ver1.0 | 変換 | TKY2JGD | 1.3.79 | 2.1.1 | 400 | +--------------------+-----------+-----------+--------------------------------------------------------------+------------------+---------+----------------+----------+------------------+------------------------+-------------------+ 492 rows in set (0.00 sec) ``` - 表示OK - 一部データを修正 - csvにしてしまっているため、本文中のコンマを$にかえているため - 修正するデータの表示 - `SELECT map_name FROM mojmap_summary_37201 WHERE map_name LIKE '%$%';` - ゼロでござる - あった場合は、以下で置換 - `UPDATE mojmap_summary SET map_name=replace(map_name,'$',',') WHERE map_name LIKE '%$%';` - 文字の中に$があった場合にどうするかは、検討 - 具体的手順 _zukaku ファイル群の登録 - tableを作成 ``` CREATE TABLE mojmap_zukaku_37201 ( filename varchar(100), map_no varchar(50), scale varchar(10), unknown_direct_flg varchar(10), leftbottom_x float, leftbottom_y float, lefttop_x float, lefttop_y float, rightbottom_x float, rightbottom_y float, righttop_x float, righttop_y float, maptype varchar(100), mapcategory varchar(100), mapmaterial varchar(100), sonae_ymd_y varchar(4), sonae_ymd_m varchar(2), sonae_ymd_d varchar(2), map_ymd_y varchar(4), map_ymd_m varchar(2), map_ymd_d varchar(2) ); CREATE INDEX idx_zkk_fn ON mojmap_zukaku_37201(filename); ``` - CREATE INDEX は、上のテーブルではいらないの? - csvデータをテーブルにロードする - `LOAD DATA LOCAL INFILE 'e:\\amx\\37kawaga37021_zukaku.csv' INTO TABLE mojmap_zukaku_37201 FIELDS TERMINATED BY ',' IGNORE 1 LINES;` ``` mysql> LOAD DATA LOCAL INFILE 'e:\\amx\\37kawaga37021_zukaku.csv' INTO TABLE mojmap_zukaku_37201 FIELDS TERMINATED BY ',' IGNORE 1 LINES; Query OK, 16912 rows affected, 1133 warnings (0.51 sec) Records: 16912 Deleted: 0 Skipped: 0 Warnings: 1133 ``` - できた! - ハマりどころを詰めておいていただいた、sakaikさんに感謝! - 高松を例に集計 ``` mysql> SELECT coordinate , COUNT(*) FROM mojmap_summary_37201 GROUP BY coordinate ORDER BY coordinate; +------------------+----------+ | coordinate | COUNT(*) | +------------------+----------+ | 任意座標系 | 168 | | 公共座標4系 | 324 | +------------------+----------+ 2 rows in set (0.01 sec) ``` ``` SELECT map_name , COUNT(*) FROM mojmap_summary_37201 WHERE coordinate = "任意座標系" GROUP BY map_name ORDER BY map_name; ``` ``` mysql> SELECT map_name , COUNT(*) FROM mojmap_summary_37201 WHERE coordinate = "任意座標系" GROUP BY map_name ORDER BY map_name; +-----------------------------------------------------------+----------+ | map_name | COUNT(*) | +-----------------------------------------------------------+----------+ | A | 1 | | B | 1 | | C | 1 | | D | 1 | | E | 1 | | F | 1 | | G | 1 | | H | 1 | | 三条町・東ハゼ町 | 1 | | 上之町2丁目 | 1 | | 上福岡町A | 1 | | 上福岡町B | 1 | | 中新町 | 1 | | 中野町 | 1 | | 丸の内 | 1 | | 亀岡町 | 1 | | 井口町 | 1 | | 今新町 | 1 | | 八坂町 | 1 | | 内町 | 1 | | 北浜町 | 1 | | 南 和紙 | 1 | | 南和紙三木町 | 1 | | 原字上井手西・南山田・城一 | 1 | | 古馬場町 | 1 | | 城東町1丁目・2丁目 | 1 | | 塩上町1丁目~3丁目・観光通1丁目 | 1 | | 塩屋町 | 1 | | 多賀町1丁目・2丁目・3丁目 | 1 | | 多賀町2丁目 | 1 | | 大字上西字大屋敷・小出川 | 1 | | 大字大野14B01 | 1 | | 大字安原上東14B01 | 1 | | 大字安原上東字大相 | 1 | | 大字安原下(数値)13A | 1 | | 大字安原下(数値)13B | 1 | | 大字安原下14C02 | 1 | | 大字安原下14C03 | 1 | | 大字安原下14C04 | 1 | | 大字安原下字コウソ・関・黒石・橋谷・他 | 1 | | 大字安原下字浦山・コウソ | 1 | | 大字安原下字金光A | 1 | | 大字川内原14B01 | 1 | | 大字川内原14B02 | 1 | | 大字川内原14B03 | 1 | | 大字川内原14B04 | 1 | | 大字川内原14B05 | 1 | | 大字川内原14C01 | 1 | | 大字川東上14B01 | 1 | | 大字川東下14B01 | 1 | | 大字川東下14B02 | 1 | | 大字東谷(数値)13A | 1 | | 大字東谷(数値)14A01 | 1 | | 大字東谷14B01 | 1 | | 大字東谷14B02 | 1 | | 大字東谷14B03 | 1 | | 大字東谷14B04 | 1 | | 大字東谷14B05 | 1 | | 大字東谷14C02 | 1 | | 大字東谷字下谷 | 1 | | 大字東谷字久保田 | 1 | | 大字東谷字仏坂 | 1 | | 大字東谷字向坂 | 1 | | 大字東谷字大杖 | 1 | | 大字東谷字大深田 | 1 | | 大字東谷字天神 | 1 | | 大字東谷字引土 | 1 | | 大字東谷字日向 | 1 | | 大字東谷字森窪 | 1 | | 大字東谷字白砂 | 1 | | 大字東谷字芦脇 | 1 | | 大字東谷字落合 | 1 | | 大字東谷字遅越 | 1 | | 大字東谷字釜床 | 1 | | 大字東谷字額谷 | 1 | | 大字浅野14B02 | 1 | | 大字浅野14B03 | 1 | | 大字浅野14B04 | 1 | | 大字浅野14B05 | 1 | | 大字浅野14B06 | 1 | | 大字浅野14B07 | 1 | | 大字由佐13C02 | 1 | | 大工町 | 1 | | 大町12A | 1 | | 女木町 | 1 | | 室新町 | 1 | | 室新町字万蔵 | 1 | | 宮脇町(2丁目) | 1 | | 宮脇町1丁目 | 1 | | 宮脇町1丁目(追加) | 1 | | 宮脇町1丁目(追加1) | 1 | | 宮脇町2丁目 | 1 | | 寒川 和紙 | 1 | | 寿町1丁目・2丁目・玉藻町 | 1 | | 屋島東町A | 1 | | 屋島西町A | 1 | | 岡本町13B | 1 | | 峯山町 | 1 | | 川東上14A01 | 1 | | 常盤町1丁目・2丁目 | 1 | | 幸町 | 1 | | 庵治2 | 1 | | 庵治3 | 1 | | 庵治4 | 1 | | 庵治5 | 1 | | 庵治町C | 1 | | 庵治町D | 1 | | 庵治町E | 1 | | 庵治町F | 1 | | 庵治町H | 1 | | 庵治町数値 | 1 | | 御坊町 | 1 | | 扇町1丁目 | 1 | | 新北町B | 1 | | 昭和町1丁目・2丁目 | 1 | | 朝日新町 | 1 | | 朝日町1~4丁目 | 1 | | 朝日町5丁目 | 1 | | 朝日町6丁目 | 1 | | 末広町 | 1 | | 本町 | 1 | | 東浜町1丁目 | 1 | | 松島町 | 1 | | 松島町1丁目~3丁目 | 1 | | 松福町1丁目・2丁目 | 1 | | 栗林町1丁目~3丁目 | 1 | | 浜ノ町A | 1 | | 浜ノ町B | 1 | | 瀬戸内町A | 1 | | 瀬戸内町B | 1 | | 片原町 | 1 | | 牟礼町B | 1 | | 牟礼町C | 1 | | 牟礼町D | 1 | | 牟礼町E | 1 | | 牟礼町H | 1 | | 牟礼町J | 1 | | 牟礼町K | 1 | | 玉藻町 | 1 | | 瓦町1丁目・2丁目 | 1 | | 生島町A | 1 | | 田町 | 1 | | 番町1丁目~5丁目 | 1 | | 百間町 | 1 | | 福岡町1丁目・2丁目 | 1 | | 福岡町1丁目B | 1 | | 福岡町2丁目 | 1 | | 福岡町3丁目・4丁目 | 1 | | 福田町 | 1 | | 築地町 | 1 | | 花ノ宮町1丁目・2丁目・3丁目 | 1 | | 花園町1丁目・2丁目・3丁目 | 1 | | 茜町・西町A | 1 | | 茜町・西町C | 1 | | 藤塚町(1丁目~3丁目) | 1 | | 西宝町1丁目・2丁目 | 1 | | 西宝町3丁目 | 1 | | 観光町 | 1 | | 観光通1丁目・2丁目 | 1 | | 観音寺和紙 | 1 | | 通町 | 1 | | 錦町1丁目・2丁目 | 1 | | 香川町大字安原下字鮎滝下 | 1 | | 高松市 | 1 | | 高松市瀬戸内町_1 | 1 | | 高松町 | 1 | | 鶴屋町 | 1 | | 鶴市町 | 1 | +-----------------------------------------------------------+----------+ 168 rows in set (0.00 sec) ```

    Import from clipboard

    Paste your markdown or webpage here...

    Advanced permission required

    Your current role can only read. Ask the system administrator to acquire write and comment permission.

    This team is disabled

    Sorry, this team is disabled. You can't edit this note.

    This note is locked

    Sorry, only owner can edit this note.

    Reach the limit

    Sorry, you've reached the max length this note can be.
    Please reduce the content or divide it to more notes, thank you!

    Import from Gist

    Import from Snippet

    or

    Export to Snippet

    Are you sure?

    Do you really want to delete this note?
    All users will lose their connection.

    Create a note from template

    Create a note from template

    Oops...
    This template has been removed or transferred.
    Upgrade
    All
    • All
    • Team
    No template.

    Create a template

    Upgrade

    Delete template

    Do you really want to delete this template?
    Turn this template into a regular note and keep its content, versions, and comments.

    This page need refresh

    You have an incompatible client version.
    Refresh to update.
    New version available!
    See releases notes here
    Refresh to enjoy new features.
    Your user state has changed.
    Refresh to load new user state.

    Sign in

    Forgot password

    or

    By clicking below, you agree to our terms of service.

    Sign in via Facebook Sign in via Twitter Sign in via GitHub Sign in via Dropbox Sign in with Wallet
    Wallet ( )
    Connect another wallet

    New to HackMD? Sign up

    Help

    • English
    • 中文
    • Français
    • Deutsch
    • 日本語
    • Español
    • Català
    • Ελληνικά
    • Português
    • italiano
    • Türkçe
    • Русский
    • Nederlands
    • hrvatski jezik
    • język polski
    • Українська
    • हिन्दी
    • svenska
    • Esperanto
    • dansk

    Documents

    Help & Tutorial

    How to use Book mode

    Slide Example

    API Docs

    Edit in VSCode

    Install browser extension

    Contacts

    Feedback

    Discord

    Send us email

    Resources

    Releases

    Pricing

    Blog

    Policy

    Terms

    Privacy

    Cheatsheet

    Syntax Example Reference
    # Header Header 基本排版
    - Unordered List
    • Unordered List
    1. Ordered List
    1. Ordered List
    - [ ] Todo List
    • Todo List
    > Blockquote
    Blockquote
    **Bold font** Bold font
    *Italics font* Italics font
    ~~Strikethrough~~ Strikethrough
    19^th^ 19th
    H~2~O H2O
    ++Inserted text++ Inserted text
    ==Marked text== Marked text
    [link text](https:// "title") Link
    ![image alt](https:// "title") Image
    `Code` Code 在筆記中貼入程式碼
    ```javascript
    var i = 0;
    ```
    var i = 0;
    :smile: :smile: Emoji list
    {%youtube youtube_id %} Externals
    $L^aT_eX$ LaTeX
    :::info
    This is a alert area.
    :::

    This is a alert area.

    Versions and GitHub Sync
    Get Full History Access

    • Edit version name
    • Delete

    revision author avatar     named on  

    More Less

    Note content is identical to the latest version.
    Compare
      Choose a version
      No search result
      Version not found
    Sign in to link this note to GitHub
    Learn more
    This note is not linked with GitHub
     

    Feedback

    Submission failed, please try again

    Thanks for your support.

    On a scale of 0-10, how likely is it that you would recommend HackMD to your friends, family or business associates?

    Please give us some advice and help us improve HackMD.

     

    Thanks for your feedback

    Remove version name

    Do you want to remove this version name and description?

    Transfer ownership

    Transfer to
      Warning: is a public team. If you transfer note to this team, everyone on the web can find and read this note.

        Link with GitHub

        Please authorize HackMD on GitHub
        • Please sign in to GitHub and install the HackMD app on your GitHub repo.
        • HackMD links with GitHub through a GitHub App. You can choose which repo to install our App.
        Learn more  Sign in to GitHub

        Push the note to GitHub Push to GitHub Pull a file from GitHub

          Authorize again
         

        Choose which file to push to

        Select repo
        Refresh Authorize more repos
        Select branch
        Select file
        Select branch
        Choose version(s) to push
        • Save a new version and push
        • Choose from existing versions
        Include title and tags
        Available push count

        Pull from GitHub

         
        File from GitHub
        File from HackMD

        GitHub Link Settings

        File linked

        Linked by
        File path
        Last synced branch
        Available push count

        Danger Zone

        Unlink
        You will no longer receive notification when GitHub file changes after unlink.

        Syncing

        Push failed

        Push successfully