我有我的Git存储库,它在根目录下有两个子目录:
/finisht
/static
Run Code Online (Sandbox Code Playgroud)
当这是在SVN,/finisht在一个地方签出,而/static在其他地方查出来,像这样:
svn co svn+ssh://admin@domain.com/home/admin/repos/finisht/static static
Run Code Online (Sandbox Code Playgroud)
有没有办法用Git做到这一点?
我有一个名为'skeleton'的本地Git存储库,用于存储项目框架.它有一些分支,用于不同类型的项目:
casey@agave [~/Projects/skeleton] git branch
* master
rails
c
c++
Run Code Online (Sandbox Code Playgroud)
如果我想查看一个新项目的主分支,我可以做
casey@agave [~/Projects] git clone skeleton new
Initialized empty Git repository in /Users/casey/Projects/new/.git/
Run Code Online (Sandbox Code Playgroud)
一切都是我想要的.具体来说,新的主分支指向骨架主分支,我可以推拉以移动对基本项目设置的更改.
但是,如果我想要克隆另一个分支,那么什么不起作用.我无法得到它,所以我只拉动我想要的rails分支,例如分支,然后新的存储库有一个master分支,rails默认情况下推送到骨架存储库的分支并从中拉出.
这有什么好办法吗?或者,也许这不是Git想要我构建事物的方式,我当然对此持开放态度.也许我应该有多个存储库,Ruby on Rails骨架存储库跟踪主骨架存储库?任何克隆Ruby on Rails骨架存储库的单个项目.
如何从git repo中仅查看一个文件?
我正在使用包含大量文件的存储库,这需要几个小时才能结账.我正在研究Git是否能够很好地使用这种类型的存储库,因为它支持稀疏检出,但我能找到的每个示例都执行以下操作:
git clone <path>
git config core.sparsecheckout true
echo <dir> > .git/info/sparse-checkout
git read-tree -m -u HEAD
Run Code Online (Sandbox Code Playgroud)
这个命令序列的问题是原始克隆也执行结帐.如果将-n添加到原始克隆命令,则read-tree命令会导致以下错误:
错误:稀疏结账不会在工作目录上留下任何条目
如何在不先检出所有文件的情况下进行稀疏结账?
使用Git 1.7.0中新的稀疏结账功能,是否可以像在SVN中一样获取子目录的内容?我找到了这个例子,但它保留了完整的目录结构.想象一下,我只想要'perl'目录的内容,而没有名为'perl'的实际目录.
- 编辑 -
例:
我的git存储库包含以下路径
repo/.git/
repo/perl/
repo/perl/script1.pl
repo/perl/script2.pl
repo/images/
repo/images/image1.jpg
repo/images/image2.jpg
repo/doc/
repo/doc/readme.txt
repo/doc/help.txt
Run Code Online (Sandbox Code Playgroud)
我想要的是能够从上面的存储库中生成这种布局:
repo/.git/
repo/script1.pl
repo/script2.pl
Run Code Online (Sandbox Code Playgroud)
然而,使用当前的稀疏结账功能,似乎只能获得
repo/.git/
repo/perl/script1.pl
repo/perl/script2.pl
Run Code Online (Sandbox Code Playgroud)
这不是我想要的.
由于Git能够跟踪(并保持干净)具有完全不同内容的分支,因此在同一个存储库中,一些项目(如Git本身)已经开始使用它.
例如,Git使用一个分支代码本身,同时将其文档保存在单独的分支中.同样的回购,只是不同的分支.
它可能只是我,来自SVN背景,但我发现在这些分支中"没有任何共同点"令人困惑.开发/分期/生产分支机构; 那些我理解的.分支不完整的特征; 当然,我也在做那些.哎呀,每个语言都有一个分支的文档.但没有共同的文件?
这只是Git中的一个(可能是一个未被充分利用和/或不足的)功能,每个人都应该接受并习惯,或者一个懒惰的人可能会因为没有区分同一个项目的两个方面而被滥用?
许多供应商的Objective-C库(例如facebook-ios-sdk)指示您将其repo的文件/目录的某个子集复制到Xcode项目中.这样做的一个问题是你不知道你有什么版本的供应商代码.另一个原因是,如果您对供应商代码进行更改,则通过Git提交更改并不容易.
作为一个解决方案,我想将每个供应商库添加为我项目的repo的Git子模块,并带有一些额外的设置(例如,在.gitmodules文件中).这样,如果另一个人克隆我的项目git submodule update --init,他们的repo和子模块将具有与我相同的状态,因为他们将使用我设置的相同默认设置:
如何为Git子模块设置上述设置?
我正在尝试克隆存储库的一部分。我看到了一些关于过滤的帖子,看起来应该可以过滤克隆并能够使用最新版本的 git 从浅层存储库中推送。我有一个杂项存储库,其中包含几个小项目,并且希望能够一次只处理一两个项目。假设我在存储库的根目录中有一个名为矩阵的目录,这是否是克隆其中一部分的正确语法?
git clone url --filter=sparse:path=matrix
Run Code Online (Sandbox Code Playgroud)
我收到错误“服务器无法识别过滤,忽略”,我猜这可能与 bitbucket 有关,对吧?
谢谢!
我在 Github 上有一个 git 仓库,看起来像这样:
.git/
assets/
tools/
a.sh
b.sh
c.sh
Run Code Online (Sandbox Code Playgroud)
当然 .git 文件夹不在版本控制中,但您明白了。我想将 tools/*.sh 复制到本地目录,路径如下:
./scripts/git/tools
Run Code Online (Sandbox Code Playgroud)
我当前的目录是一个 git 存储库,它与远程 git 存储库共享完全不同的历史记录,我只想从远程复制一些文件,我不想合并任何内容。
我想我可以做这样的事情:
git clone --path assets/tools/*.sh "$remote_repo" ./scripts/git/tools
Run Code Online (Sandbox Code Playgroud)
但该命令不是真实的,我可以使用一些命令来执行此操作吗?
我能想到的唯一其他方法是将整个存储库克隆到某个临时目录,然后复制文件,但这并不是那么有趣。
我理解如何在Git中配置稀疏结账,但我想知道是否可以消除主要目录.例如,假设我有一个Git存储库,其文件夹结构如下:
我只想要里面的内容stuff2.对于那些目录的稀疏检出,.git/info/spare-checkout文件看起来像这样:
folder3/another/foo/bar/stuff2/
Run Code Online (Sandbox Code Playgroud)
我的问题是在我完成稀疏结账后,我没有看到stuff2或者stuff2我的目录根目录内的内容; 我看到folder3,然后所有的子目录导致stuff2.
我猜这个问题的答案是Git不可能,但我只是想确定一下.这是我想念的SVN的一种(也是唯一的)行为; 能够运行svn co https://url.com/myrepo/folder3/another/foo/bar/stuff2 .并将内容转储到当前目录中.
git ×10
git-clone ×3
branch ×2
bitbucket ×1
clone ×1
file ×1
git-checkout ×1
git-subtree ×1
github ×1
repository ×1
subdirectory ×1