在我的服务器上,我托管了一些我正在处理的裸git存储库.我想在我的网站上显示关于每个存储库的一些基本统计信息; 现在,我只想说我想做一些简单的事情,比如列出存储库中的所有文件.在非裸git存储库上,可以使用
git ls-files
Run Code Online (Sandbox Code Playgroud)
但对于裸存储库,这(以及大多数其他git命令)不起作用.我确定可能有一种简单的方法来执行这个特定的命令,但我可能想要为不同的存储库显示一些复杂/项目特定的统计信息,所以我真的在问是否有办法执行任何/所有git在裸存储库上的命令,而不必进行临时克隆或类似的复杂事情.我怀疑我需要设置一些命令参数,但我还没弄清楚哪一个.
是否有一个用于裸git repo目录的GUI(任何地方都没有工作树),我可以:
关于我为什么需要这个:
我的git是这样的:git --git-dir = xx --work-tree = yy init(从非git文件夹添加/提交到裸仓库)
我找不到一个工具可以处理这种情况(分离工作树和回购)
我想使用git log命令从指定分支上的给定日期开始提取存储库中的更改列表.
出于此目的,我发现以下语法似乎工作正常:
git log --since=2011-10-01 --branches=mybranch
Run Code Online (Sandbox Code Playgroud)
上面的命令在我的工作站(Ubuntu 10.04,GIT 1.7.7.2)中的克隆存储库上正常工作,但在创建克隆的主存储库上输出了错误的日志.主存储库是在Centos 5.5,GIT 1.7.3.4上托管的裸GIT存储库.基本上,主存储库不显示许多最近的提交.
我不明白这是否是预期的行为,并且差异是由于主回购是裸的,或者由于GIT版本不相同这是不同的行为.
我的遥控器上有一个裸存储库.我想查看在编辑器中打开并查看代码的文件.对于列出文件,git ls-files master或git ls-tree master.并且为了查看单个文件,我可以做git show 100644但是如何查看目录中的文件.这是一个例子:
100644 blob 03ec70a7ab513de8d568450dd8fca93987a22da0 .gitignore
100644 blob 75a85b0137fe1ee0c60bda6dcfac78d2d59a1759 README.md
040000 tree 53a58d85bc833575fdfee86058d88a4928c6fe76 templates
Run Code Online (Sandbox Code Playgroud)
如果我做git show 03ec70,它会显示.gitignore文件的内容
如果我做git show 53a58d,它会列出模板文件夹的内容
403.html
404.html
500.html
base.html
Run Code Online (Sandbox Code Playgroud)
但是如何打开单个文件才能看到它们.示例:上述情况中的base.html
我一直面临着理解裸存储库的困难.我到处都读到共享的回购是一个简单的回购.为什么它必须是一个简单的回购?它不能是合作者克隆然后推/拉的正常回购吗?
裸Git存储库有哪些用例?
我们什么时候应该使用裸存储库以及它给我们带来的好处?
如果我需要一个与团队共享的存储库并从生产服务器中提取更改,我应该使用一个简单的Git存储库吗?
有一个远程git裸仓库,我从一台机器上推了一个分支,然后拉到另一台机器上.
在另一台机器上进行了一些更改,试图将这些更改推回到远程裸仓库,我收到'receive.denyCurrentBranch'错误.
这是怎么回事?
这不应该发生在一个裸露的回购 - 它没有任何检查.
从机器2看到的分支是:
Fix
dev1
dev2
remotes/origin/HEAD -> origin/dev1
remotes/origin/Fix
remotes/origin/dev1
remotes/origin/dev2
remotes/origin/master
Run Code Online (Sandbox Code Playgroud)
'Fix'是两台开发机器上的当前分支.
当我最初在机器2上拉动那个分支时,我做了:
git pull
git checkout -b Fix origin/Fix
Run Code Online (Sandbox Code Playgroud)
我怀疑第一个"遥控器"线 - 似乎HEAD应该指向我当前的分支,但事实并非如此.想想我错过了什么,这里..
更新1 我将'Fix'分支合并到dev1分支,然后推送'dev1'分支 - 运行正常(无论如何我都要这样做).
所以,这是一种解决方法,但我认为真正的问题是HEAD没有绑定到当前分支('Fix'),而是绑定到非活动分支('dev1').我不知道如何改变遥控器上的头部?
正如您可能已经知道的那样,默认情况下,git不会为新的裸存储库启用reflog更新.问题是,我有一个很长的历史存储库,但它是在我设置标志"logAllRefUpdates"之前创建的,现在我希望其他应用程序的信息能够正常工作.
如何通过对现有存储库进行的最小更改来实现这一目标.一个非常简单的解决方案是推送一个我不想要的新提交(!):-)
这可能很可怕,我不确定。
假设我们有一个带有工作目录的回购“产品”
/product
/product/command.script
/product/config/ (bare git repo)
Run Code Online (Sandbox Code Playgroud)
和一个带有工作目录的 repo "config"
/config
/config/config.json
Run Code Online (Sandbox Code Playgroud)
command.script 文件具有与裸存储库交互的操作。前任。运行 command.script BRANCH1 将运行命令
git show BRANCH1:config.json
Run Code Online (Sandbox Code Playgroud)
有什么办法可以让“/product/config/”文件夹成为“product”repo的子模块,这样当“product”repo被克隆时,“config”repo也将被克隆
git clone --bare [config origin here] config
Run Code Online (Sandbox Code Playgroud)
从它的来源开始,当“product”repo 被获取时,“/product/config”子模块可以被获取
git fetch origin '*:*'
Run Code Online (Sandbox Code Playgroud)
或者这是应该通过某种钩子处理的东西吗?
我有一个现有的裸Git存储库,它是从CVS导入我们的源代码和历史记录而创建的.我做了一面镜子,使用:
git clone --mirror git://aserver.adomain.com/myrepo
Run Code Online (Sandbox Code Playgroud)
然后,我想将所有分支和标签推送到我们内部的Git repo主机, 但推送似乎并没有将裸存储库视为Git仓库.
我尝试过以下方法:
git clone --mirror git://aserver.adomain.com/myrepo
git remote set-url origin http://user@anotherserver.adomain.com/project/myrepo.git
git push origin
Run Code Online (Sandbox Code Playgroud)
这导致:
$ git push origin
Password for 'xxxx':
error: cannot spawn git: No such file or directory
Run Code Online (Sandbox Code Playgroud)
或者我试试:
$ git remote rm origin
Note: Some branches outside the refs/remotes/ hierarchy were not removed;
to delete them, use:
...a whole lot of branches...
user@SOMEMACHINE /some/path/myrepo.git (BARE:master)
$ ls
HEAD config description hooks info objects packed-refs refs
user@SOMEMACHINE /some/path/myrepo.git (BARE:master) …Run Code Online (Sandbox Code Playgroud)