我一直在用Git做我所有的工作,并将其推送到GitHub。我对软件和网站都很满意,我不希望在这一点上改变我的工作实践。
我的博士导师要求所有学生将作业保存在学校托管的SVN存储库中。我发现了大量关于将现有的SVN存储库下拉到Git中的文档和教程,但没有关于将Git存储库推到新的SVN存储库中的文档和教程。我希望通过结合Git -svn、一个新的分支和rebase以及所有这些美妙的术语来实现这一点,但我是Git新手,对其中任何一个都没有信心。
然后,当我选择时,我希望只运行几个命令将提交推到SVN存储库。我希望继续使用Git,让SVN存储库镜像Git中的内容。
我将是唯一一个致力于SVN的人,如果这有什么不同的话。
还有一个有效的序列(每个步骤都有一些注释):
Install git-svn and subversion toolkits:
sudo apt-get install git-svn subversion
Switch inside the PROJECT_FOLDER
cd PROJECT_FOLDER
Create the project path on the Subversion server (unfortunately the current git-svn plugin has a defect in comparison with TortoiseSVN). It is unable to store source code directly into the PROJECT_FOLDER. Instead, by default, it will upload all the code into PROJECT_FOLDER/trunk.
svn mkdir --parents protocol:///path/to/repo/PROJECT_FOLDER/trunk -m "creating git repo placeholder"
在这里,中继在路径的末端是强制性的
Initialize the git-svn plugin context inside the .git folder
git svn init -s protocol:///path/to/repo/PROJECT_FOLDER
This is the place where trunk at the end of the path is unnecessary
Fetch an empty Subversion repository information
git svn fetch
This step is helping to synchronize the Subversion server with the git-svn plugin. This is the moment when git-svn plugin establishes remotes/origin path and associates it with the trunk subfolder on the server side.
Rebase old Git commits happened before the git-svn plugin became involved in the process (this step is optional)
git rebase origin/trunk
Add new/modified files to commit (this step is regular for Git activities and is optional)
git add .
Commit freshly added files into the local Git repository (this step is optional and is only applicable if step 7 has been used):
git commit -m "Importing Git repository"
Pushing all the project changes history into the Subversion server:
git svn dcommit
还有一个有效的序列(每个步骤都有一些注释):
Install git-svn and subversion toolkits:
sudo apt-get install git-svn subversion
Switch inside the PROJECT_FOLDER
cd PROJECT_FOLDER
Create the project path on the Subversion server (unfortunately the current git-svn plugin has a defect in comparison with TortoiseSVN). It is unable to store source code directly into the PROJECT_FOLDER. Instead, by default, it will upload all the code into PROJECT_FOLDER/trunk.
svn mkdir --parents protocol:///path/to/repo/PROJECT_FOLDER/trunk -m "creating git repo placeholder"
在这里,中继在路径的末端是强制性的
Initialize the git-svn plugin context inside the .git folder
git svn init -s protocol:///path/to/repo/PROJECT_FOLDER
This is the place where trunk at the end of the path is unnecessary
Fetch an empty Subversion repository information
git svn fetch
This step is helping to synchronize the Subversion server with the git-svn plugin. This is the moment when git-svn plugin establishes remotes/origin path and associates it with the trunk subfolder on the server side.
Rebase old Git commits happened before the git-svn plugin became involved in the process (this step is optional)
git rebase origin/trunk
Add new/modified files to commit (this step is regular for Git activities and is optional)
git add .
Commit freshly added files into the local Git repository (this step is optional and is only applicable if step 7 has been used):
git commit -m "Importing Git repository"
Pushing all the project changes history into the Subversion server:
git svn dcommit