如何在裸仓库上运行git p4 submit
? git p4 submit
的哪个命令行选项是什么?
我希望我公司的团队使用perforce,转移到git。我想用Git-P4实现这一目标。我想将一部分perforce克隆到一个git仓库,并将其作为一个远程仓库,以便人们克隆它,将更改推送到远程仓库,我会定期将远程仓库中所做的更改重新提交给perforce 。所以我按照本教程
http://answers.perforce.com/articles/KB_Article/Git-P4
归结为这个命令:
git p4 clone //depot/path.to/folder@all folder --bare
那可行,然后在我的客户端机器上
git clone "user1@server:/home/user1/path/to/folder"
,这很好,它显示出来,所以我编辑了一个测试文件,然后执行
git add file
git commit -m 'test'
git push.
然后工作,但是现在回到远程仓库现在在带回购的文件夹中,我这样做,
git p4 rebase
我得到了这个
git p4 rebase
Performing incremental import into refs/remotes/p4/master git branch
Depot paths: //depot/path.to/folder/
No changes to import!
fatal: This operation must be run in a work tree
Some files in your working directory are modified and different than what is in your index. You can use git update-index <filename> to bring the index up-to-date or stash away all your changes with git stash.
和
git p4 submit
给了我这个:
Perforce checkout for depot path //depot/path.to/folder/ located at /home/user1/path/to/perforce.folder/
Synchronizing p4 checkout...
... - file(s) up-to-date.
fatal: Not a git repository: '.'
Command failed: ['git', 'rev-list', '--no-merges', 'remotes/p4/master..master']
所以问题是当我提交时,git repo不能是一个简单的仓库,它必须是一个带有工作目录的常规仓库,对吧?但如果是这样的话,为什么甚至给我一个--bare
选项呢?我正在执行--bare
选项的原因是,当我将其删除时,我得到了一组有关远程仓库工作副本中未提交更改的错误。但是如何让git p4提交而没有任何错误?
答案 0 :(得分:3)
我对git p4
的理解非常有限,但理论上这应该有用。
要以某种方式使用git p4
,使您的裸git repo和perforce repos同步,您需要至少维护3种不同类型的存储库:
git p4
命令。只需一个常规的裸git repo就足够了。所有使用git的开发人员都应直接克隆此存储库并仅将更改作为远程推送到此repo中。git p4
命令的地方。 在 GitP4Repo :
中git p4 clone <PERFORCE_FILE_PATH>
git fetch origin && git rebase origin/master master
)p4
定期使用git p4 rebase
进行更改。 (实际上git p4 sync
后跟git rebase p4/master
)git p4 submit
将更改提交到perforce。您需要在客户端工作区中映射 P4Workspace 。git push origin master
推送从perforce合并的更改,返回 BareGitRepo 我能想到的事情:
git p4 rebase
时,git commit SHA1可能会改变,因为它会在新的perforce提交之上调用git rebase
覆盖你的git repo的提交。我不确定是否有使用git merge
的选项,并保留git提交的SHA1哈希值。最后回答你的问题,为什么git p4 clone
有--bare
选项,我只能想象git-p4的clone
命令试图与常规git clone
类似命令。
git clone
还有一个--bare
选项,用于创建裸存储库。不,您也无法在此类存储库中运行git pull
或git checkout
或git rebase
。
答案 1 :(得分:1)
你不能从一个简单的回购提交。一个简单的回购只是用于克隆和推送更改。如果你想提交,你需要在另一个地方克隆裸仓库。
为什么你想要一个简单的回购呢?好吧,它是在你托管一个git项目时使用的,它有一个每个人都推送的简单主存储库。通常,裸仓库生活在不是任何人直接使用的服务器上。保持'裸'回购允许git尽可能高效地压缩所有数据。在许多情况下,与签出的回购单的单个修订版相比,您可能会看到10:1的压缩率。