첫 번째 명령 이후 bash 스크립트에서 git 명령을 실행하는 데 문제가 있습니다.

첫 번째 명령 이후 bash 스크립트에서 git 명령을 실행하는 데 문제가 있습니다.

myuser 디렉터리 내의 폴더에 파일을 복사하고, 원래 경로 구조를 복사하고, 파일을 git 저장소에 추가하고 변경 사항을 커밋하는 스크립트를 사용하여 루트 폴더의 구성 파일을 백업하는 작업을 하고 있습니다. 스크립트는 백업할 구성 파일의 경로를 인수로 사용합니다.

BU.sh /etc/apt/sources.list

분명히 프로그램의 첫 번째 실행은 README.md만 포함된 새로 복제된 저장소에서 제대로 작동했지만 후속 실행에서는 git 명령이 효과가 없는 것 같았습니다.

스크립트는 다음과 같습니다(일부 디버깅 정보가 추가됨).

#! /bin/bash
#
set -x -e -u
export GIT_DIR=/home/myuser/config-BU/.git
export GIT_WORK_TREE=/home/myuser/
        #echo "file NOT in USER DIR, is NOT symlink";
        ls -l config-BU
        mkdir -p /home/myuser/config-BU/"${1%/*}";
        ls -l config-BU
        sudo install -o myuser -g myuser -m 660 "$1" "/home/myuser/config-BU$(realpath $1)";
        ls -l config-BU
        sudo -k;
        git status
        git ls-files
        git add "/home/myuser/config-BU$(realpath $1)";
        git ls-files
        git commit -am "adding file inside BU autom: file NOT in user folder" -m "$(realpath $1)";
        git log

이 명령을 두 번 실행한 결과는 다음과 같습니다.

MYPROMPT>:~$ ./cp2bu2_badpart.sh /var/log/faillog
+ export GIT_DIR=/home/myuser/config-BU/.git
+ GIT_DIR=/home/myuser/config-BU/.git
+ export GIT_WORK_TREE=/home/myuser/
+ GIT_WORK_TREE=/home/myuser/
+ ls -l config-BU
total 4
-rw-r--r-- 1 myuser myuser 27 Jul  7 19:40 README.md
+ mkdir -p /home/myuser/config-BU//var/log
+ ls -l config-BU
total 8
-rw-r--r-- 1 myuser myuser   27 Jul  7 19:40 README.md
drwxr-xr-x 3 myuser myuser 4096 Jul  7 22:25 var
++ realpath /var/log/faillog
+ sudo install -o myuser -g myuser -m 660 /var/log/faillog /home/myuser/config-BU/var/log/faillog
[sudo] password for myuser:
+ ls -l config-BU
total 8
-rw-r--r-- 1 myuser myuser   27 Jul  7 19:40 README.md
drwxr-xr-x 3 myuser myuser 4096 Jul  7 22:25 var
+ sudo -k
+ git status
On branch main
Your branch is up to date with 'origin/main'.

Changes not staged for commit:
  (use "git add/rm <file>..." to update what will be committed)
  (use "git restore <file>..." to discard changes in working directory)
deleted:    README.md

Untracked files:
  (use "git add <file>..." to include in what will be committed)

==LIST OF FILES IN MY HOME DIR==
no changes added to commit (use "git add" and/or "git commit -a")
+ git ls-files
README.md
++ realpath /var/log/faillog
+ git add /home/myuser/config-BU/var/log/faillog
+ git ls-files
README.md
++ realpath /var/log/faillog
+ git commit -am 'adding file inside BU autom: file NOT in user folder' -m /var/log/faillog
[main 2487ec3] adding file inside BU autom: file NOT in user folder
 1 file changed, 2 deletions(-)
 delete mode 100644 README.md
+ git log
commit 2487ec3857d355313971f2a45ba7d318870bc219 (HEAD -> main)
Author: myuser <myemail>
Date:   Fri Jul 7 22:26:41 2023 +0200

    adding file inside BU autom: file NOT in user folder
   
    /var/log/faillog

commit 84112df2c48137f247af78497e416182f0e0c24c (origin/main, origin/HEAD)
Author: Pippetta87 <[email protected]>
Date:   Thu Oct 13 03:59:13 2022 +0200

    Create README.md

MYPROMPT>:~$ ./cp2bu2_badpart.sh /etc/X11/rgb.txt
+ export GIT_DIR=/home/myuser/config-BU/.git
+ GIT_DIR=/home/myuser/config-BU/.git
+ export GIT_WORK_TREE=/home/myuser/
+ GIT_WORK_TREE=/home/myuser/
+ ls -l config-BU
total 8
-rw-r--r-- 1 myuser myuser   27 Jul  7 19:40 README.md
drwxr-xr-x 3 myuser myuser 4096 Jul  7 22:25 var
+ mkdir -p /home/myuser/config-BU//etc/X11
+ ls -l config-BU
total 12
-rw-r--r-- 1 myuser myuser   27 Jul  7 19:40 README.md
drwxr-xr-x 3 myuser myuser 4096 Jul  7 22:27 etc
drwxr-xr-x 3 myuser myuser 4096 Jul  7 22:25 var
++ realpath /etc/X11/rgb.txt
+ sudo install -o myuser -g myuser -m 660 /etc/X11/rgb.txt /home/myuser/config-BU/etc/X11/rgb.txt
[sudo] password for myuser:
+ ls -l config-BU
total 12
-rw-r--r-- 1 myuser myuser   27 Jul  7 19:40 README.md
drwxr-xr-x 3 myuser myuser 4096 Jul  7 22:27 etc
drwxr-xr-x 3 myuser myuser 4096 Jul  7 22:25 var
+ sudo -k
+ git status
On branch main
Your branch is ahead of 'origin/main' by 1 commit.
  (use "git push" to publish your local commits)

Untracked files:
  (use "git add <file>..." to include in what will be committed)

==LIST OF FILES IN MY HOME DIR==

nothing added to commit but untracked files present (use "git add" to track)
+ git ls-files
++ realpath /etc/X11/rgb.txt
+ git add /home/myuser/config-BU/etc/X11/rgb.txt
+ git ls-files
++ realpath /etc/X11/rgb.txt
+ git commit -am 'adding file inside BU autom: file NOT in user folder' -m /etc/X11/rgb.txt
On branch main
Your branch is ahead of 'origin/main' by 1 commit.
  (use "git push" to publish your local commits)

Untracked files:
  (use "git add <file>..." to include in what will be committed)

==LIST OF FILES IN MY HOME DIR==

nothing added to commit but untracked files present (use "git add" to track)

보시다시피, 두 번째 실행은 파일을 git 저장소에 추가하지 않으며 마지막 git 로그도 실행되지 않습니다. 후속 git 명령은 git status무시되는 것처럼 보입니다.

감사합니다

답변1

다음과 같이 스크립트를 시작할 수 있습니다.

export GIT_DIR=/home/myuser/config-BU/.git
export GIT_WORK_TREE=/home/myuser/

작업 디렉토리는 실제로 /home/myuser/config-BU.

그렇기 때문에 실행하면 다음이 git status표시됩니다.

Changes not staged for commit:
  (use "git add/rm <file>..." to update what will be committed)
  (use "git restore <file>..." to discard changes in working directory)
deleted:    README.md

README.mdGIT_WORK_TREE( ) 에서 찾을 수 없어 /home/myuser/README.md파일이 삭제된 것으로 간주합니다.

그런 다음 변경 사항을 커밋하면 README.md인덱스에서 다시 제거되는 것을 볼 수 있습니다.

git commit -am 'adding file inside BU autom: file NOT in user folder' -m /var/log/faillog
[main 2487ec3] adding file inside BU autom: file NOT in user folder
 1 file changed, 2 deletions(-)
 delete mode 100644 README.md

관련 정보