【问题标题】:How to create a pushable bare git repository that also pushes files?如何创建一个也可以推送文件的可推送裸 git 存储库?
【发布时间】:2014-06-02 14:35:43
【问题描述】:

我在/f/gittest/foo(远程)中有<path1>。 我在/f/gittest/bar(本地)中有<path2>

因为我现在不需要远程作为工作副本,主要是因为我无法推送到活动分支,所以我把它裸露了。

我创建了一个 .git 目录并在 /f/gittest/foo/.git 中运行 git init --bare。 我进去并将远程仓库添加到本地仓库,制作文件,添加、提交和推送到远程仓库。更改似乎要推送,并且遥控器已成功更新。但是,本地存储库跟踪的文件(例如 example1.txt 和 example2.txt)未显示在远程中(尽管我认为在远程存储库中进行了跟踪)。如何使用推送的文件更新此远程目录?我以前在没有获取和镜像的情况下成功地做到了这一点,但我不记得是如何做到的。

双重检查行为: mkdir alpha/; mkdir beta/; cd beta/

mkdir .git/; cd .git/; git init --bare; cd ../../alpha/

git init; touch example1.txt(在 example1.txt 中输入文本)

git add example1.txt; git commit -m "Initial Commit"

git remote add destination ../beta/.git; git push destination master

【问题讨论】:

  • 请仔细检查所描述的行为。在本地添加和提交的文件在推送后立即在远程可用。
  • @Moe 遵循上面编辑的命令。推送后,我在远程(在 beta/ 下)看不到文件。
  • 如果您在推送后远程执行git log 会发生什么?
  • @Moe 我看到了来自本地的提交(带有“初始提交”)。

标签: git repository git-push git-bare


【解决方案1】:

首先,在.git 文件夹中创建一个裸仓库并不是通常的最佳做法:

  • .git 是非裸仓库的文件夹(一个工作树位于 .git 的父文件夹中)
  • foo.git 将是裸仓库“foo”的文件夹名称。

其次,推送到裸仓库意味着不会“显示”任何文件:裸仓库就是要避免同步工作树。

相反,您可以将post-receive 添加到您的裸仓库中hook

export GIT_WORK_TREE=..
git checkout -f HEAD

(正如我在“Where are the project files stored in a git repository .git folder?”中提到的)

【讨论】:

    【解决方案2】:

    裸存储库没有签出版本,因此只会跟踪所有文件,但不会在目录中显示它们。 如果您想签出包含最新提交的存储库的文件夹,我建议您在推送后通过 git hook 签出一个分离的树。

    请看这里Git Post-Receive Hook for Website Staging

    【讨论】:

      【解决方案3】:

      如果你创建一个目录

      mkdir some_dir
      cd some_dir
      

      并初始化一个裸 git repo,

      git init --bare
      git remote add origin git@github.com:username/reponame.git
      

      然后你在那里创建一些文件说

      echo "some_text" > somefile.txt
      echo "some_text" > somefile1.txt
      

      如果您在此阶段推送,它们将不会反映在您的远程存储库中。

      如果你提交,

      git add .
      # Even if you push at this stage, you wont see the files in remote git server
      git commit -m "Pushing to git server"
      

      它们将反映在远程 git 服务器中。

      编辑:

      您不能像创建本地裸仓库那样在服务器上创建裸仓库。由远程 git 服务器来处理这种情况。例如,github,您可以从他们的 UI 创建一个裸仓库,或者他们为此提供 API。这个线程可能是相关的Is it possible to create a remote repo on GitHub from the CLI without opening browser?

      【讨论】:

      • 我希望 remote repo 是裸露的,而不是本地 repo。我需要的本地仓库是工作副本。
      • 响应您的编辑,我是服务器,如果您想从这个意义上考虑的话。这是在本地文件系统上完成的,而不是通过 github 或其他 git 存储库服务。无论如何,是否可以创建一个裸存储库不是问题。遥控器的路径也不是。
      • 在这种情况下,我不确定如何处理这种情况。我也想知道解决办法。让我们等待专家解答。
      猜你喜欢
      • 1970-01-01
      • 2016-10-18
      • 2011-01-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-02-22
      • 2013-05-07
      • 2011-04-29
      相关资源
      最近更新 更多