如何git push到特定文件夹?

时间:2018-02-15 17:39:43

标签: github travis-ci github-pages

我使用Travis CI建立我的Jekyll网站并推送给Github。很多文档都是为了将​​Jekyll代码保留在master分支中,并构建网站并将_site推送到gh-pages分支。我想避免这样做并在Github上使用username.github.io repo。

这是我目前的构建脚本:

#!/bin/bash

# skip if build is triggered by pull request
if [ $TRAVIS_PULL_REQUEST == "true" ]; then
  echo "this is PR, exiting"
  exit 0
fi

# enable error reporting to the console
set -e

# cleanup "_site"
rm -rf _site
mkdir _site

# build with Jekyll into "_site"
bundle exec jekyll build

# push
cd _site
git config user.email "john.doe@gmail.com"
git config user.name "John Doe"
git add --all
git commit -a -m "Travis #$TRAVIS_BUILD_NUMBER"
git push origin master

当然,git push origin master现在用生成的网站替换整个分支本身。如何生成网站并将其保留在_site

2 个答案:

答案 0 :(得分:0)

我假设您在某个文件夹中运行此脚本。我们称之为my_project

my_folder内,当您运行此脚本时,它会创建一个_site文件夹。 接下来你正在做cd _site。不要这样做。

相反,请保留在my_project文件夹并执行git config步骤以及此级别的其他步骤。

因此,这将推送此my_project文件夹中的所有内容,该网站将位于_site文件夹中。

答案 1 :(得分:0)

<强> TL,DR:

更改这些行:
git add --all
git commit -a -m "Travis #$TRAVIS_BUILD_NUMBER"

要:
git add ./ #I assume you've cd'd into the directory you want to commit.
git commit -m "Travis #$TRAVIS_BUILD_NUMBER"

<强>解释

这个问题闻起来像是来自svn的人会遇到的问题。(如果你不是来自svn,请跳过下一段)

svn和git handle提交的方式有很大不同。 使用svn时,提交始终相对于当前目录。因此,行cd _site将所谓的当前工作目录更改为_site。在那里,svn只关心当前目录及其子目录。

另一方面,git命令将爬上目录路径,直到它们到达根目录。因此,当您在_site并使用--all-a 命令时,它将提交整个分支中的所有更改。 因此,在add命令中替换--all with ./,这只是当前目录的linux简写。并删除co​​mmit命令中的-a。所以&#34;更改添加&#34;仅来自目前的目录,即_site。这将分段提交更改。您从commit命令中删除-a,以便它只提交暂存的更改。

另外,git add --all后跟git commit -a是多余的。提交中的-a忽略了添加到舞台的内容,只提交所有更改。