我一直在阅读Git中的裸机和非裸机/默认存储库.我无法理解(理论上)它们之间的差异,以及为什么我应该"推"到一个裸存储库.这是交易:
目前,我是唯一一个在3台不同计算机上工作的人,但是后来会有更多人参与其中,所以我使用Git进行版本控制.我在所有计算机上克隆了裸仓库,当我在其中一台计算机上完成修改后,我提交并将更改推送到裸仓库.从我所读到的,裸存储库没有"工作树",所以如果我克隆裸仓库,我将没有"工作树".
我猜测工作树存储项目中的提交信息,分支等.这不会出现在裸仓库中.因此,对于我来说,使用工作树将提交"推送"到repo似乎更好.
那么,为什么我应该使用裸存储库,为什么不呢?有什么实际区别?我认为,这对于从事项目的更多人来说没有好处.
你做这种工作的方法是什么?建议?
我想访问一个裸git存储库,我想列出存储库中的所有文件.
在普通的git存储库中,我可以通过运行轻松完成git ls-files.
示例输出:
$ git ls-files
README.md
file1.js
file2.js
file3.js
folder1/file4.js
folder2/file5.js
Run Code Online (Sandbox Code Playgroud)
在一个裸git存储库中,这会无声地失败.它只是不返回任何文件(但成功退出):
$ cd my-bare-repository
$ git ls-files #returns nothing
$ echo $? #print exit code from previous command
$ 0
Run Code Online (Sandbox Code Playgroud)
现在我知道我必须提供一个有意义的分支或主要显示.但是,我怎样才能真正获得我知道的存储库中的文件列表?
对于存在于每个单一git回购中的东西......在地球上......确实没有太多关于它的信息filemode.来自谷歌的前100个回复都到处都是,并且没有问过这个'标题的问题..所以这里是..那是什么filemode?对我来说,它在每个回购./git/config文件中,靠近顶部,一个...
[core]
filemode = true
Run Code Online (Sandbox Code Playgroud)
它是什么?这是什么意思?它与之有任何关系吗?
bare = false
Run Code Online (Sandbox Code Playgroud)
我也没有真正得到......我git 像一个疯子一样使用,并且知道其他 git的无穷无尽,恕我直言,任意炮制/半脑筋 config参数......但不是这个......我是确定这是一个简单的事情(可能与权限有关?或者war会触发更改标志?),所以如果你知道更多关于如何操纵设置/以及产生什么效果......那将是很好的...
我收到了警告
warning: You did not specify any refspecs to push, and the current remote
warning: has not configured any push refspecs. The default action in this
warning: case is to push all matching refspecs, that is, all branches
warning: that exist both locally and remotely will be updated. This may
warning: not necessarily be what you want to happen.
warning:
warning: You can specify what action you want to take in this case, and
warning: avoid seeing this message again, …Run Code Online (Sandbox Code Playgroud) 我在CentOs上设置了一个新的Gitlab,/opt/gitlab-6.9.2-0/apps/gitlab/并在持续交付组下创建了一个新的存储库.完整的路径是/opt/gitlab-6.9.2-0/apps/gitlab/gitlab-satellites/continuous-delivery/cd-test
.此路径下只有一个文件是README.txt.
我试图实现的是当有人将更改推送到服务器时创建一个新文件.以下是我在服务器上所做的事情:
post-update和update文件.git/hooks/' each file creates a new file using当我将更改从本地推送到服务器时,没有创建文件.所以,我想知道我要做些什么来解决这个问题.
更新1
我添加post-receive并post-update到repositories路径VonC建议
[root@git-cd hooks]# pwd
/opt/gitlab-6.9.2-0/apps/gitlab/repositories/continuous-delivery/cd-test.git/hooks
[root@git-cd hooks]# ll
total 48
-rwxrwxr-x. 1 git git 452 Jun 10 06:01 applypatch-msg.sample
-rwxrwxr-x. 1 git git 896 Jun 10 06:01 commit-msg.sample
-rwxrwxr-x. 1 git git 44 Jun 11 00:37 post-receive
-rwxrwxr-x. 1 git git 41 Jun 11 00:38 post-update
-rwxrwxr-x. 1 git …Run Code Online (Sandbox Code Playgroud) 这可能已经得到了回答,但我没有找到一个好的答案.
我来自集中式存储库,例如SVN,通常您只执行检出,更新,提交,还原,合并等等.
Git让我发疯.有很多命令,但最难理解的是为什么很多东西都像他们一样工作.
根据"什么是裸git存储库?" :
使用创建的存储库
git init --bare称为裸存储库.它们的结构与工作目录略有不同.首先,它们不包含源文件的工作或签出副本.
...
创建的裸存储库git init --bare用于... 共享....开发人员将克隆共享裸仓库,在其仓库的工作副本中进行本地更改,然后回退到共享裸仓库以使其他用户可以使用其更改.
- Jon Saints,http://www.saintsjd.com/2011/01/what-is-a-bare-git-repository/
但是,从接受的答案"github存储库和git裸存储库之间有什么区别?" :
GitHub上的Git repos是裸的,就像你要推送到[sic]的任何远程仓库一样.
- VonC,https://stackoverflow.com/a/20855207
但是,在GitHub中有源文件.我可以看到他们.如果我创建一个裸存储库,则没有源文件,只有.git工作存储库目录的内容.
这怎么可能?我不明白什么?
您能举例说明为什么我需要一个裸存储库及其以这种方式工作的动机吗?
爱德华汤姆森的回答部分是我想知道的.不过,我会重新提出我的问题:
我发布了第一个链接状态("什么是裸git存储库?"):
它们[裸存储库]不包含源文件的工作或签出副本.
VonC的回答:
GitHub上的Git repos是裸的
两个陈述暗示
Github没有工作副本.
爱德华汤姆森说:
它会在您浏览数据时根据数据呈现网页 - 将数据直接从存储库中提取出来并输出到您的Web浏览器,而不是先将数据写入文件服务器上的磁盘
不知何故,裸存储库必须包含所有数据和源代码.如果没有,那么渲染任何东西都不是不可能的,因为我可以看到所有源代码更新(提交),所有分支(具有各自的源),回购的整个日志等.
存储库的整个数据是否始终位于.git目录(或裸存储库)中,以某种格式可以随时呈现所有文件?这是裸存储库的原因,而工作副本只在给定时间有文件吗?
我有一个正常运行的PHP盒式磁带,除了我无法找到一种直接的方法来获取OpenShift(递归地)推送我的git子模块的文件在推送我的核心repo文件时/之后.
这似乎应该是一个超级简单和常见的用例.我忽略了什么吗?
我可以ssh进入我的服务器并手动拉它们,但我想完全自动化,所以如果我在我的仓库中更新子模块的引用,这些更改将在我部署时反映出来.
裸Git存储库有哪些用例?
我们什么时候应该使用裸存储库以及它给我们带来的好处?
如果我需要一个与团队共享的存储库并从生产服务器中提取更改,我应该使用一个简单的Git存储库吗?
我想计算 git 存储库中的总代码行数。我在谷歌找到了答案。
git ls-files -z | xargs -0 cat | wc -l
它在本地存储库中运行良好。
但。我想在远程存储库中计数。
所以,我试过了。
git ls-files -z /home/bjyoo/repositories/root/localfiletest.git | xargs -0 cat | wc -l
,
git ls-files -z --git-dir=/home/bjyoo/repositories/root/localfiletest.git | xargs -0 cat | wc -l
和
git --git-dir=/home/bjyoo/repositories/root/localfiletest.git --ls-files | xargs -0 cat | wc -l
所有命令失败。
有谁知道如何计算代码总行数?
我想看看上个月 gitlab 服务器端的 repo 变化了多少
cd /path/to/my/bare/repo.git/
git --git-dir . diff --shortstat "@{1 month ago}"
fatal: Unable to read log 'logs/refs/heads/master': No such file or directory
Run Code Online (Sandbox Code Playgroud)
但是它在本地结帐工作分支中工作正常。
有没有办法在没有太多麻烦的情况下做到这一点?
为了避免 XY 问题:我想通过 Gitlab 服务器上的数百个存储库运行统计数据
从一台PC上的本地git存储库备份完整分支的最佳方法是将其添加到另一台PC上的本地git存储库。
如果远程git储存库服务器由于末端故障而脱机。
git ×11
git-bare ×4
repository ×2
bash ×1
config ×1
deployment ×1
filesystems ×1
git-diff ×1
git-log ×1
git-ls-files ×1
github ×1
gitlab ×1
linux ×1
openshift ×1
redhat ×1
settings ×1