Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Xcode服务器持续集成和git lfs_Xcode_Git_Github_Git Lfs - Fatal编程技术网

Xcode服务器持续集成和git lfs

Xcode服务器持续集成和git lfs,xcode,git,github,git-lfs,Xcode,Git,Github,Git Lfs,我在Xcode中创建了一个机器人,用于在我的项目上进行持续集成 我添加了一个触发器,在集成之前运行,我尝试执行“git lfs pull”,以便它将大文件拉入Xcode用于执行构建的临时目录 为了使集成成功,“git-lfs-pull”工作的方法是什么 目前我无法让它成功下载大文件。我的脚本如下所示: #!/bin/bash changeToRepo() { cd ${XCS_SOURCE_DIR}/My-Project-Name } changeToRepo /usr/local/

我在Xcode中创建了一个机器人,用于在我的项目上进行持续集成

我添加了一个触发器,在集成之前运行,我尝试执行“git lfs pull”,以便它将大文件拉入Xcode用于执行构建的临时目录

为了使集成成功,“git-lfs-pull”工作的方法是什么

目前我无法让它成功下载大文件。我的脚本如下所示:

#!/bin/bash

changeToRepo() {
    cd ${XCS_SOURCE_DIR}/My-Project-Name
}

changeToRepo
/usr/local/bin/git-lfs pull
但是,大型文件没有下载,当我检查触发器脚本的日志时,我看到以下输出

Git LFS:(1个文件中的0个)0 B/139.13 MB

Git LFS:(1个文件中的0个)0 B/139.13 MB
无法签出文件git lfs/1.1.0(GitHub;darwin amd64;go 1.5.1; git 258acf1)git版本2.5.4(苹果git-61)

$git lfs pull无法签出文件

无法写入工作目录文件:打开媒体文件时出错。 goroutine 66[正在运行]:github.com/github/git lfs/lfs.Stack(0x0,0x0, 0x0)/Users/rick/go/src/github.com/github/git-lfs/lfs/errors.go:557 +0x80 github.com/github/git lfs/commands.logPanicToWriter(0x89a1e8、0xc82002e018、0x896028、0xc82000e480) /Users/rick/go/src/github.com/github/git lfs/commands/commands.go:184 +0xf7f github.com/github/git lfs/commands.logPanic(0x896028、0xc82000e480、0x0、0x0) /Users/rick/go/src/github.com/github/git lfs/commands/commands.go:148 +0x421 github.com/github/git lfs/commands.handlePanic(0x896028、0xc82000e480、0x0、0x0) /Users/rick/go/src/github.com/github/git lfs/commands/commands.go:123 +0x4e github.com/github/git lfs/commands.LoggedError(0x896028、0xc82000e480、0x548060、0x17、0x0、0x0、0x0、0x0) /Users/rick/go/src/github.com/github/git lfs/commands/commands.go:73 +0x82 github.com/github/git lfs/commands.checkoutWithChan(0xc82012c4e0) /Users/rick/go/src/github.com/github/git lfs/commands/command\u checkout.go:202 +0x860 github.com/github/git lfs/commands.checkoutFromFetchChan.func1(0xc82012c4e0, 0xc82018e040) /Users/rick/go/src/github.com/github/git lfs/commands/command\u checkout.go:78 +0x21由github.com/github/git-lfs/commands.checkoutfromfetchan创建 /Users/rick/go/src/github.com/github/git lfs/commands/command\u checkout.go:80 +0x439


下面是我如何让git lfs在机器人中工作的。首先,我编辑了我的bot“集成前”触发器运行脚本,如下所示:

我们导出user/local/bin中的路径b/c git lfs(这些其他位置可能适用,具体取决于您安装它的方式或您使用的服务器类型)。否则,无法找到git lfs

目录My-Project_Dir/My子文件夹Dir是项目的位置。Xcode服务器将把我的源代码下载到${XCS_source_DIR},这是一个临时文件夹,但与我的大文件相关的.git文件位于my-Project_DIR/my Subfolder DIR中

请注意,cd和git lfs命令位于括号内,这是因为cd命令生成一个子进程。如果我们有一行cd,下一行有git lfs,那么目录不会保持更改,因为在子进程退出后,父进程仍然在初始目录中。git lfs命令不会在子进程的新目录中发出,除非我们在该子进程中顺序运行这些命令

还要注意,我需要将sudo与git-lfs一起使用,否则git-lfs没有权限。bot运行在与我的服务器管理空间不同的用户空间中,用户名为_xcsbuildd

因此,将_xcsbuildd用户添加到sudoers。在终端中,使用以下命令:

$ sudo visudo
找到行“%admin ALL=(ALL)ALL”,按“a”编辑文件,并在其下方添加以下行:

_xcsbuildd ALL=(ALL) NOPASSWD: ALL
按Esc键,然后通过键入以下内容写入并退出:

:wq 
检查以确保sudoers是正确的:

$ sudo cat /etc/sudoers | grep _xcsbuildd
_xcsbuildd ALL=(ALL) NOPASSWD: ALL 

各位,我不确定最初的解决方案是否有问题,但如果您有问题,请尝试下面的方法-使用Xcode 9.2中的Xcode Build Server对我有效/不需要任何权限/sudo等。基本上是通过自制安装git lfs,然后立即执行
git lfs pull

#!/bin/sh -ex
pushd "${XCS_SOURCE_DIR:?}"

rm -rf homebrew
mkdir homebrew
curl -L "https://github.com/Homebrew/brew/tarball/master" | tar xz --strip 1 -C homebrew
export PATH="$PATH:$PWD/homebrew/bin"
brew install git-lfs

cd YourCheckedOutRepository
git lfs pull

popd
#!/bin/sh -ex
pushd "${XCS_SOURCE_DIR:?}"

rm -rf homebrew
mkdir homebrew
curl -L "https://github.com/Homebrew/brew/tarball/master" | tar xz --strip 1 -C homebrew
export PATH="$PATH:$PWD/homebrew/bin"
brew install git-lfs

cd YourCheckedOutRepository
git lfs pull

popd