コンテンツにスキップ

シンボリックリンクに関する小さな問題

シンボリックリンクとクラウド同期

以前の クラウド同期及び Obsidian 関連 の記事で触れたことだが:

あれこれ試した結果、やはりマイクロソフトの OneDrive に戻ってきた。cmd で次のコマンドを使用する:

Bash
mklink /d "D:\OneDrive\Songs" "D:\osu\Songs"`

リンクを作成することで、僕が個人的に設定した OneDrive フォルダ D:\OneDrive(デフォルトの場所は忘れてしまった)に Songs フォルダが現れる。中を見てみると、なんと D:\osu\Songs の中身が表示される。これで Windows 側は成功だ。

ここで使用したコマンドはシンボリックリンクを作成するもので、実際のドキュメントは後者の D:\osu\Songs に存在し、前者の D:\OneDrive\Songs は後者を指すシンボリックリンクとなる。注意点として、前者に元々 Songs フォルダが存在してはならず、存在する場合はシンボリックリンクを作成できない。

この方法には OneDrive がファイルの同期状態を正しく表示できないという問題が発生する。解決方法は、まずファイルを別の場所に移動し、シンボリックリンクを右クリックで削除する:

ネットで多くの方法を調べたがどれも効果がなく、削除後に同名のフォルダを作成できない、フォルダ名に自動的に 2 というサフィックスが付くバグが発生した。まるで死んでも消えない亡霊のようだった。

解決方法は、シンボリックリンクを絶対に重複しない名前(適当に打てばいい)に変更してから右クリックで削除すること。これで同名のフォルダを新規作成できる。

そしてファイルをクラウドに移動し、mklink /d "D:\osu\Songs" "D:\OneDrive\Songs" を使えばいい。

シンボリックリンクと VSCode と Git

上記の手順でクラウドに実データを保存し、使用場所ではシンボリックリンクを使って僕のプロジェクトの _post フォルダを iCloud の 帖子 フォルダを指すようにした後、VSCode でプロジェクトフォルダを開くと _post フォルダの後ろにシンボリックリンクであることが表示されるが、通常と変わりなく問題はない。

しかし問題は Git の同期で発生する。git push した後、シンボリックリンクが指すフォルダは GitHub にアップロードされず、シンボリックリンク自体がアップロードされる。

僕にとってこれは影響がない。なぜなら、僕は .release_tool/main.py を使ってビルドし、二つのリポジトリに公開しているからだ —— 一つはソースファイルのリポジトリで、もう一つはビルド後の GitHub Pages リポジトリである。