首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在git存储库和非git目录之间同步

在git存储库和非git目录之间同步
EN

Stack Overflow用户
提问于 2014-06-20 01:59:58
回答 1查看 311关注 0票数 2

我想找到一个有效的方式来同步文件之间的git存储库和目标目录。本例中的目标目录是由ptxdist管理的嵌入式linux发行版的构建位置。

我经常构建不同版本的发行版,所以我将各种git代码库设置为相应的提交,对构建树执行rsync,然后构建发行版。这种方法的问题是,rsync从一个提交中留下了可能在另一个提交中不存在的文件,并可能导致代码混淆。

我可以将发行版作为git存储库,并将git放入其中,但我不需要跟踪我正在构建的内容。

最佳选择似乎是使用git-archive创建git repos的tar文件,删除目标目录,然后将tar文件解压缩到目标目录。然而,如果只有几个文件在进入发行版的所有文件中进行了更改,这似乎效率很低。

我想要的是一种像rsync --delete或者unison -prefer这样的方式,将文件放在git存储库中,而不是git工作目录中,因为我想保留一些未跟踪的文件。

更新

下面是我使用的bash脚本,它完成了所需的操作,

代码语言:javascript
复制
#!/usr/bin/env bash

# Does one way sync between commit and target directory where the target
# directory is not a git archive.
# USAGE: git-archive-commit <source directory> <target directory> [<treeish>] [-- <paths>...]
set -e
sourceDir="$(readlink -f $1)"
targetDir="$(readlink -f $2)"

shift; shift
checkoutArgs="$@"
gitSetup="--work-tree=$targetDir --git-dir=$sourceDir/.git"

function gitStash {
        pushd . > /dev/null 2>&1
        cd $targetDir
        git $gitSetup stash -q
        git $gitSetup stash drop -q > /dev/null 2>&1
        popd > /dev/null 2>&1
}

if [ $# -gt 0 ]; then   
        if [ $1 != "--" ]; then
                if [ $# = 1 ]; then
                        gitStash
                fi
                git $gitSetup checkout $checkoutArgs
                shift
        else
                git $gitSetup checkout $checkoutArgs
        fi
else
        gitStash
        git $gitSetup checkout
fi
git $gitSetup clean -df "$@"
EN

回答 1

Stack Overflow用户

发布于 2014-06-20 02:38:21

如果你“可以把发行版做成git仓库,然后把git拉进去”,这意味着:

  • git在服务器上可用(或可用)
  • 服务器可与客户端联系(反之亦然)

您可以:

在服务器上创建一个空的repo /path/to/myrepo.git

  • set in it作为更新后的钩子:/path/to/myrepo.git/hooks/post-update

  • git

每次拉取后,更新后脚本都会触发:

代码语言:javascript
复制
git --work-tree=/path/to/target/directory --git-dir=/path/to/myrepo.git checkout HEAD

这将忽略未跟踪的文件,但会在每个git pull之后更新(添加/修改/删除)跟踪的文件。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24313368

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档