
루트 액세스 권한이 있는 로컬 워크스테이션과 루트 액세스 권한이 없는 서버가 있다고 가정합니다. 이 두 컴퓨터 간에 (주로 구성) 파일을 공유하고 싶습니다. 그래서 내 홈 디렉토리의 최상위 레벨에 git 저장소를 설정하고 이러한 파일을 추가했습니다. 여태까지는 그런대로 잘됐다.
또한 두 컴퓨터 모두에 필요한 파일이 있다고 가정합니다. 패키지 관리자와 함께 제공되므로 내 홈 디렉토리 외부에 설치됩니다. 서버에 설치되지 않으며 서버에 설치되지도 않습니다. 이제 두 가지 옵션이 있습니다.
로컬에서 패키지 관리자로 설치하고 원격 서버에 직접 설치합니다. 이렇게 하면 파일이 동기화되지 않습니다. 어느 정도 괜찮습니다. 해당 파일은 패키지 관리자에서 가져온 것이므로 실제로 작업 중인 파일은 아닙니다. 하지만 새 서버로 이동할 때에는 항상 별도로 설치해야 하는데 이런 일이 자주 발생합니다. 하지만 패키지를 설치하는 쉘 스크립트를 추가하고 이 쉘 스크립트를 git 저장소에 추가할 수 있습니다.
내 홈 디렉터리에 로컬로 설치하고 저장소에 추가합니다. 이렇게 하면 다른 컴퓨터에 별도로 설치할 필요가 없고 동기화가 유지되지만 더 이상 패키지 관리자를 통해 업데이트되지 않습니다. 그것이 바로 내가 지금 하고 있는 일이다.
질문은 이렇습니다. 이 작업을 수행하는 더 나은 세 번째 방법이 있습니까? 심볼릭 링크 마법 이 있나요 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