Git 저장소 외부에 파일 추가

Git 저장소 외부에 파일 추가

루트 액세스 권한이 있는 로컬 워크스테이션과 루트 액세스 권한이 없는 서버가 있다고 가정합니다. 이 두 컴퓨터 간에 (주로 구성) 파일을 공유하고 싶습니다. 그래서 내 홈 디렉토리의 최상위 레벨에 git 저장소를 설정하고 이러한 파일을 추가했습니다. 여태까지는 그런대로 잘됐다.

또한 두 컴퓨터 모두에 필요한 파일이 있다고 가정합니다. 패키지 관리자와 함께 제공되므로 내 홈 디렉토리 외부에 설치됩니다. 서버에 설치되지 않으며 서버에 설치되지도 않습니다. 이제 두 가지 옵션이 있습니다.

  1. 로컬에서 패키지 관리자로 설치하고 원격 서버에 직접 설치합니다. 이렇게 하면 파일이 동기화되지 않습니다. 어느 정도 괜찮습니다. 해당 파일은 패키지 관리자에서 가져온 것이므로 실제로 작업 중인 파일은 아닙니다. 하지만 새 서버로 이동할 때에는 항상 별도로 설치해야 하는데 이런 일이 자주 발생합니다. 하지만 패키지를 설치하는 쉘 스크립트를 추가하고 이 쉘 스크립트를 git 저장소에 추가할 수 있습니다.

  2. 내 홈 디렉터리에 로컬로 설치하고 저장소에 추가합니다. 이렇게 하면 다른 컴퓨터에 별도로 설치할 필요가 없고 동기화가 유지되지만 더 이상 패키지 관리자를 통해 업데이트되지 않습니다. 그것이 바로 내가 지금 하고 있는 일이다.

질문은 이렇습니다. 이 작업을 수행하는 더 나은 세 번째 방법이 있습니까? 심볼릭 링크 마법 이 있나요 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

관련 정보