GNU Stowの「--adopt」オプションとは反対ですか?

GNU Stowの「--adopt」オプションとは反対ですか?

私はそれを使用していますGNUストー私のドットファイルを次のように管理してくださいこのガイド。これは、コンピュータに既存のドットファイルがない場合に有効です。たとえば、ファイルが存在しない場合は、~/.config/foo.cfg次が正常に動作します。

~/.dotfiles$ mkdir -p foo/.config
~/.dotfiles$ echo My config > foo/.config/foo.cfg
~/.dotfiles$ stow foo
~/.dotfiles$ ls -l ~/.config
lrwxrwxrwx 1 user group 21 Dec  6 19:03 ~/.config -> .dotfiles/foo/.config

~/.config/foo.cfgすでに存在する場合、それほど単純ではありません。

~/.dotfiles$ stow foo
WARNING! stowing bar would cause conflicts:
  * existing target is neither a link nor a directory: foo.cfg
All operations aborted.

これまで私が見つけた唯一の解決策は、.dotファイルを手動で削除し~/.config/foo.cfgて再実行することですstow foo。 stow を使用してポイントファイルを管理する目的。

ストウには--adopt選択権がありました。これは、保存されたファイルをコンピュータ上のstow --adopt foo既存のfooファイルに置き換えてシンボリックリンクを作成することです。foo私が探しているのは反対の効果を得る方法です。マシンの.dotfilesをstashバージョンへのシンボリックリンクに置き換えることで、Gitリポジトリのstash dotファイルを使用して新しいマシンをプロビジョニングできます。

これはStowを使用してポイントファイルを管理するための当然の要件のようです。何かが欠けていたり、問題がすでに解決されているような気がします。

どんなアイデアがありますか?

ベストアンサー1

私は同じ制限に遭遇し、--adoptこのオプションとうまく機能するワークフローを見つけました。で述べたように文書を保存:

...ターゲットツリーのファイル(内容はstowパッケージのインストールイメージの対応するバージョンと異なる場合があります)をパッケージに適用し、stowパッケージ内で "git diff ..."などのコマンドを実行します。内容は比較され、最後に保持されるか(例: "git commit ..."を介して)削除されます( "git checkout HEAD ...")。

私のワークフロー:

  1. stowこのオプションを使用して実行してください--adopt
  2. .を使用して、「採用された」ファイルをマイストアの元のファイルと比較しますgit diff
  3. git reset --hardディレクトリ全体を最後のコミットされた状態に復元するには、「採用された」ファイルから発生したすべての変更を削除してください。

例:

# Running from inside .dotfiles repository
❯ tree . -a
.
├── bash
│   ├── .bashrc
│   └── .xprofile

# Stow bash folder as usual and note conflicts (.bashrc in this case)
❯ stow bash
WARNING! stowing bash would cause conflicts:
  * existing target is neither a link nor a directory: .bashrc
All operations aborted.
e conflicts

# Rerun Stow with --adopt flag to place conflicting files in .dotfiles repo (no warnings)
❯ stow bash --adopt

# Use git diff to compare adopted and committed file
❯ git diff
diff --git a/bash/.bashrc b/bash/.bashrc
index cbd6843..0ac2879 100644
--- a/bash/.bashrc
+++ b/bash/.bashrc
@@ -1,121 +1 @@
... Line changes are listed ...

# Discard adopted file and revert back to contents as per last commit
❯ git reset --hard

# Done

私は最初にdotfilesとStowに触れたので、いくつかの制限がありません。これまでの結果に満足しています。

おすすめ記事