>

git 저장소에서 virtualhost 폴더로 파일을 복사하고 있는데, 다음 명령 중 어느 것도 기존 파일을 덮어 쓰지 않습니다.

sudo cp -R /home/git/repo /var/www/website
sudo cp -R -f /home/git/repo /var/www/website

와이즈 비즈를 어떻게 확인하나요?  명령이 기존 파일을 덮어 씁니까?


편집 : 빠른 테스트, webdir에서 repo로 파일을 복사하면 파일을 덮어 쓰므로 분명히 뭔가 ( cp ) )가 webdir에서 파일을 잠그고 있습니다. 와이즈 비즈  출력 :

www-data?

그리고 :

mount

~$ mount | column -t sysfs on /sys type sysfs (rw,nosuid,nodev,noexec,relatime) proc on /proc type proc (rw,nosuid,nodev,noexec,relatime) udev on /dev type devtmpfs (rw,nosuid,relatime,size=1005964k,nr_inodes=251491,mode=755) devpts on /dev/pts type devpts (rw,nosuid,noexec,relatime,gid=5,mode=620,ptmxmode=000) tmpfs on /run type tmpfs (rw,nosuid,noexec,relatime,size=204840k,mode=755) /dev/vda1 on / type ext4 (rw,relatime,errors=remount-ro,data=ordered) securityfs on /sys/kernel/security type securityfs (rw,nosuid,nodev,noexec,relatime) tmpfs on /dev/shm type tmpfs (rw,nosuid,nodev) tmpfs on /run/lock type tmpfs (rw,nosuid,nodev,noexec,relatime,size=5120k) tmpfs on /sys/fs/cgroup type tmpfs (ro,nosuid,nodev,noexec,mode=755) cgroup on /sys/fs/cgroup/systemd type cgroup (rw,nosuid,nodev,noexec,relatime,xattr,release_agent=/lib/systemd/systemd-cgroups-agent,name=systemd) pstore on /sys/fs/pstore type pstore (rw,nosuid,nodev,noexec,relatime) cgroup on /sys/fs/cgroup/hugetlb type cgroup (rw,nosuid,nodev,noexec,relatime,hugetlb) cgroup on /sys/fs/cgroup/freezer type cgroup (rw,nosuid,nodev,noexec,relatime,freezer) cgroup on /sys/fs/cgroup/cpu,cpuacct type cgroup (rw,nosuid,nodev,noexec,relatime,cpu,cpuacct) cgroup on /sys/fs/cgroup/memory type cgroup (rw,nosuid,nodev,noexec,relatime,memory) cgroup on /sys/fs/cgroup/devices type cgroup (rw,nosuid,nodev,noexec,relatime,devices) cgroup on /sys/fs/cgroup/net_cls,net_prio type cgroup (rw,nosuid,nodev,noexec,relatime,net_cls,net_prio) cgroup on /sys/fs/cgroup/pids type cgroup (rw,nosuid,nodev,noexec,relatime,pids) cgroup on /sys/fs/cgroup/blkio type cgroup (rw,nosuid,nodev,noexec,relatime,blkio) cgroup on /sys/fs/cgroup/cpuset type cgroup (rw,nosuid,nodev,noexec,relatime,cpuset) cgroup on /sys/fs/cgroup/perf_event type cgroup (rw,nosuid,nodev,noexec,relatime,perf_event) systemd-1 on /proc/sys/fs/binfmt_misc type autofs (rw,relatime,fd=27,pgrp=1,timeout=0,minproto=5,maxproto=5,direct) debugfs on /sys/kernel/debug type debugfs (rw,relatime) mqueue on /dev/mqueue type mqueue (rw,relatime) hugetlbfs on /dev/hugepages type hugetlbfs (rw,relatime) fusectl on /sys/fs/fuse/connections type fusectl (rw,relatime) tmpfs on /run/user/1000 type tmpfs (rw,nosuid,nodev,relatime,size=204840k,mode=700,uid=1000,gid=1000)
  • 답변 # 1

    cp 대신  나는 tar 를 선호합니다  큰 나무 ..

    예, 나는 절대 cp -r 근처에서 사용합니다  구문 ( cp -al 를 사용한 하드 링크 백업 제외) 하지만 매우 구체적입니다).

    tar의 문법은 큰 트리를 복사 할 수있는 가장 훌륭한 구성을 허용합니다. 어떤 파일을 복사 할 수 있는지, 복사 할 수 없는지 (파일, 권한, 소유자 등) man tar 를 참조하십시오. .

    나는 tar 에 익숙한 것을 선호한다  명령 :

    로컬 호스트 :

    tar -cpC /path/to/source . | tar -xpC /path/to/target
    
    

    (점 . 참고  저장할 내용)을 지정합니다.

    와이즈 비에 익숙해 지세요  원격 복사에 유용 할 수 있습니다 :

    tar
    
    

    또는

    ssh user@remotesource tar -zcpC /path/to/source . | tar -zxpC /path/to/target
    
    

    또는 심지어

    tar -zcpC /path/to/source . | ssh user@targethost tar -zxpC /path/to/target
    
    

    원격 및/또는 다른 호스트에서 사용자 계정을 복사하는 동안 ssh user@remotesource tar -zcpC /path/to/source . | ssh user@targethost tar -zxpC /path/to/target  옵션 ...

    --numeric-owner  로컬 파일 시스템에 유지

    --one-file-system  기존 파일 덮어 쓰기

    --overwrite  파일에서 추출하거나 생성 할 이름 가져 오기

    -T, --files-from FILE  gzip 압축 사용

    -z 대신 tar 를 사용하지 않는 이유

    Imz-Ivan Zakharyaschev는 cpio 가 논평했다.  동일한 구문으로 할 수는 없지만 동일한 작업을 수행 할 수는 없습니다 :

    cpio   cpio 가 제출하려면archive에 저장해야하는 inode (파일, 디렉토리, dev, 소켓, fifo) 목록이 필요합니다. .

    그러나 pyzwyz   STDIN 모드를 제공하십시오 파일을 다른 디렉토리로 복사하십시오.

    구문을 더 강하게 만들지 만 cpio 를 사용할 때  이 목록을 만들려면 --pass-through 의 힘을 사용할 수 있습니다  필요한 것을 정확히 복사하려면 :

    find
    
    

    원격으로 사용하면 가능합니다 :

    find
    
    

  • 답변 # 2

    이것을 루트로 실행하고 있기 때문에 ( cd /path/to/source find . \( -type f -o -type d \) ! -name '*.foo' -print0 | cpio --null -pvd /path/to/destination 사용) ), ssh user@remotesource /bin/sh <<<'cd /path/to/source; find . \( -type f -o -type d \) ! -name '*.foo' -print0 | cpio --null -o | gzip' | ssh user@targethost 'cd /path/to/destination && gunzip | cpio -id' 에 대한 별칭이 있는지 확인 했습니까?  뿌리의 sudo 에서  또는 cp ? 다음과 같은 것 :

    .bashrc
    
    

    ' .profile 로 명령을 실행 해보십시오 ', 이렇게 :

    alias cp="cp -i"
    
    

    와이즈 비즈  와이즈 비즈   \ 를 만들 것입니다  별명없이 실행합니다.

  • 답변 # 3

    파일이 sudo \cp -R /home/git/repo /var/www/website 에서 끝나길 원하는 것처럼 들립니다. 위의 구문을 사용하면 \ 로 끝납니다. .

    당신이 \cp 를 가지고 있는지 확인함으로써 실제로 이런 일이 일어나고 있는지 확인할 수 있습니다  새 파일이있는 디렉토리.

    해결책은 cp 와 같은 것을 사용하는 것입니다. 또는 어쩌면 /var/www/website/index.html  보다 효율적으로 사용하려면

  • 답변 # 4

    파일에 대한 권한과 소유권이 중요 할 수 있지만 /var/www/website/repo/index.html 이외의 것이 필요하지 않은 경우  그리고 /var/www/website/repo/  동일한 소유자가 Git에서 직접 확인할 수 있습니다.

    cp -R source/* dest/
    
    

    와이즈 비즈  플래그는 체크 아웃을 강제하여 Git이 rsync -a source/ dest/ 의 변경 사항을 덮어 씁니다.  Git에 버전이 저장되어 있습니다.

    644  물론 "현재"커밋에 대한 Git의 아이디어를 가리키는 포인터입니다.

    <시간>

    와이즈 비즈도 둘러 볼 수있다  명령하지만, 755 에서개발을하지 않기 때문에 위의 내용이 더 적합 할 수 있습니다.

  • 답변 # 5

    git --git-dir=/home/git/repo/.git --work-tree=/var/www/website checkout -f HEAD 를 사용해 보는 것이 좋습니다. 디렉토리 대신 디렉토리의 내용을 복사 할 때 항상 운이 좋았습니다.

    -f

  • 이전 text processing - 두 개의 플랫 파일 A&B를 비교하여 B의 모든 레코드가 A에도 존재하는지 확인하십시오
  • 다음 scientific linux - 기본 명령에 대한 권한이 거부되었습니다