Git リポジトリ外にファイルを追加する

Git リポジトリ外にファイルを追加する

ルート アクセスを持つローカル ワークステーションと、ルート アクセスを持たないサーバーがあるとします。これらの 2 台のコンピューター間でファイル (主に構成) を共有したいと思います。そこで、ホーム ディレクトリにトップレベルの git リポジトリを設定し、これらのファイルを追加します。ここまでは順調です。

さらに、両方のコンピューターに必要なファイルが存在すると仮定します。このファイルはパッケージ マネージャーに付属しており、ホーム ディレクトリの外部にインストールされます。サーバーにはインストールされておらず、サーバーにインストールされることはありません。ここで、2 つのオプションがあります。

  1. パッケージ マネージャーを使用してローカルにインストールし、リモート サーバーに手動でインストールします。この方法では、ファイルは同期されません。ファイルはパッケージ マネージャーから取得されるため、実際に作業しているファイルではないため、ある程度は問題ありません。ただし、新しいサーバーに移動するときは常に個別にインストールする必要があり、これは頻繁に発生します。ただし、パッケージをインストールするシェル スクリプトを追加し、このシェル スクリプトを git リポジトリに追加することもできます。

  2. ローカルのホーム ディレクトリにインストールし、リポジトリに追加します。この方法では、異なるマシンに個別にインストールする必要はなく、同期が維持されますが、パッケージ マネージャーを通じて更新されなくなります。これが私が現在行っていることです。

ここで質問です。これを行う 3 番目の (より良い) 方法はあるのでしょうか?gitシンボリック リンク マジックはありますか?

答え1

あなたの説明から、リモート マシンでシェル スクリプトを実行したいのだと理解しました。しかし、ローカル マシンでのみ実行するシェル スクリプトを設定し、ローカル パッケージ ディレクトリからローカル git リポジトリにパッケージをプッシュする方が便利かもしれません。その後、cron を使用するか、さらに便利な git コミット フックを使用してこのスクリプトを実行し、常に同期を保つことができます。

[リクエストに応じてコメントから回答に移動しました]

答え2

現在、次のプッシュ前フックを使用しています。

#!/usr/bin/env bash

# Copy local files that are outside the repository (because they are controlled
# by the package manager) into the repository and commit them
# Although this is a pre-push hook, the files are not included in this push
# See also: http://unix.stackexchange.com/q/321328/58056

#remote="$1"
#url="$2"

localFiles=(
    /usr/bin/rg
    /usr/share/man/man1/rg.1.gz
    /usr/share/vim/vimfiles/autoload/pathogen.vim
)
remoteFiles=(
    /home/foo/pkg/bin/rg
    /home/foo/pkg/man/man1/rg.1
    /home/foo/.vim/autoload/pathogen.vim
)

echo "Execute git pre-push hook"

for idx in "${!localFiles[@]}"; do 
    localFile="${localFiles[$idx]}"
    remoteFile="${remoteFiles[$idx]}"
    echo -n "Copy ${localFile} to ${remoteFile}... "
    cp "${localFile}" "${remoteFile}"
    echo "Done."
    echo -n "Add ${remoteFile} to repository... "
    git add -f "${remoteFile}"
    echo "Done."
done

echo "Commit if there is anything to commit... "
git commit -m "Automatically add files by git pre-push hook" \
    && echo -n "Some files were added and commited (but not pushed) " \
    && echo "by the git pre-push hook"

# Don't interfere with the push, so always exit with success
exit 0

関連情報