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

関連情報