web-dev-qa-db-ja.com

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

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

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

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

  2. ホームディレクトリにローカルにインストールして、リポジトリに追加します。このように、別のマシンに個別にインストールする必要はありません。同期は維持されますが、パッケージマネージャーを介して更新されることはありません。それが私が今していることです。

そして、ここに質問があります:これを行う方法の3番目の-より良い-方法はありますか? gitシンボリックリンクマジックはありますか?

4
pfnuesel

あなたの説明から、私はあなたがリモートマシンでシェルスクリプトを実行したいと思ったと思いました。ただし、ローカルマシン上でのみ実行するようにシェルスクリプトを設定し、パッケージをローカルのpackage-directoryからローカルのgitリポジトリにプッシュする方が便利な場合があります。次に、cronを使用するか、さらにはgit commitフックを使用してこのスクリプトを実行し、常に同期するようにします。

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

2
SauceCode

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

#!/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
0
pfnuesel