git 저장소 외부에 파일 추가하기 [닫기]

git 저장소 외부에 파일 추가하기 [닫기]

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

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

  1. 패키지 관리자를 사용하여 로컬로 설치한 다음 원격 서버에 수동으로 설치했습니다. 이렇게 하면 파일이 동기화되지 않습니다. 이 파일은 패키지 관리자에서 가져온 것이므로 실제로 작업 중인 파일이 아니기 때문에 괜찮습니다. 그런데 새 서버로 이동하면 항상 별도로 설치해야 하는데 이런 일이 자주 발생합니다. 그러나 패키지를 설치하는 셸 스크립트를 추가하고 해당 셸 스크립트를 git 저장소에 추가할 수 있습니다.

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

문제는 이 작업을 수행하는 더 좋은 세 번째 방법이 있습니까?입니다. 심볼릭 링크 마법 이 있나요 git?

답변1

귀하의 설명에 따르면 원격 시스템에서 쉘 스크립트를 실행하고 싶은 것 같습니다. 그러나 로컬 패키지 디렉터리에서 로컬 git 저장소로 패키지를 푸시하기 위해 로컬 컴퓨터에서만 실행되도록 셸 스크립트를 설정하는 것이 더 편리할 수도 있습니다. 그런 다음 cron 또는 더 간결한 git 커밋 후크를 사용하여 이 스크립트를 실행하여 항상 동기화를 유지할 수 있습니다.

[요청대로 댓글에서 답변으로 이동했습니다]

답변2

현재 다음 prepush 후크를 사용하고 있습니다.

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

관련 정보